Only 20min timelapse because we concluded that we wont be able to decouple photobleaching from proteasomal decay

this RMD is to generate the df for decay rate estimation for the DMSO control

library(data.table)
library(tidyverse)
library(reshape2)
library(gganimate)
library(ggridges)
library(ggpubr)
source("~/R-scripts/R_functions/master-2-3-22.R")

#getting the information for imaris files ##files to read from Imaris

FilesToRead <- c("C0_Area", 
            "C0_Ellipsoid_Axis_Length_B",
            "C0_Ellipsoid_Axis_Length_C",
            "C0_Intensity_Center_Ch=3",
            "C0_Intensity_Mean_Ch=3", 
            "C0_Intensity_Median_Ch=3",
            "C0_Intensity_Sum_Ch=3",
            "C0_Number_of_Voxels", 
            "C0_Number_of_Triangles",
            "C0_Sphericity", 
            "C0_Volume.csv", 
            "C0_Position.csv" )

##actual reading and making them into df

list.of.files.gfp <- get.imaris.info.onlyGFP( dir.names = gfp_imaris, 
                                              files_to_read = FilesToRead ,
                                              real.time.interval.df = real.time.interval.df)
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Time` -> `Time...9`
• `TrackID` -> `TrackID...10`
• `ID` -> `ID...11`
• `X` -> `X...12`
• `Unit` -> `Unit...14`
• `Time` -> `Time...15`
• `TrackID` -> `TrackID...16`
• `ID` -> `ID...17`
• `X` -> `X...18`
• `Unit` -> `Unit...20`
• `Channel` -> `Channel...21`
• `Time` -> `Time...22`
• `TrackID` -> `TrackID...23`
• `ID` -> `ID...24`
• `X` -> `X...25`
• `Unit` -> `Unit...27`
• `Channel` -> `Channel...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Unit` -> `Unit...48`
• `Time` -> `Time...49`
• `TrackID` -> `TrackID...50`
• `ID` -> `ID...51`
• `X` -> `X...52`
• `Unit` -> `Unit...54`
• `Time` -> `Time...55`
• `TrackID` -> `TrackID...56`
• `ID` -> `ID...57`
• `X` -> `X...58`
• `Unit` -> `Unit...60`
• `Time` -> `Time...61`
• `TrackID` -> `TrackID...62`
• `ID` -> `ID...63`
• `X` -> `X...64`
• `Unit` -> `Unit...66`
• `Time` -> `Time...67`
• `TrackID` -> `TrackID...68`
• `ID` -> `ID...69`
• `X` -> `X...70`
• `Unit` -> `Unit...74`
• `Time` -> `Time...76`
• `TrackID` -> `TrackID...77`
• `ID` -> `ID...78`
• `X` -> `X...79`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Time` -> `Time...9`
• `TrackID` -> `TrackID...10`
• `ID` -> `ID...11`
• `X` -> `X...12`
• `Unit` -> `Unit...14`
• `Time` -> `Time...15`
• `TrackID` -> `TrackID...16`
• `ID` -> `ID...17`
• `X` -> `X...18`
• `Unit` -> `Unit...20`
• `Channel` -> `Channel...21`
• `Time` -> `Time...22`
• `TrackID` -> `TrackID...23`
• `ID` -> `ID...24`
• `X` -> `X...25`
• `Unit` -> `Unit...27`
• `Channel` -> `Channel...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Unit` -> `Unit...48`
• `Time` -> `Time...49`
• `TrackID` -> `TrackID...50`
• `ID` -> `ID...51`
• `X` -> `X...52`
• `Unit` -> `Unit...54`
• `Time` -> `Time...55`
• `TrackID` -> `TrackID...56`
• `ID` -> `ID...57`
• `X` -> `X...58`
• `Unit` -> `Unit...60`
• `Time` -> `Time...61`
• `TrackID` -> `TrackID...62`
• `ID` -> `ID...63`
• `X` -> `X...64`
• `Unit` -> `Unit...66`
• `Time` -> `Time...67`
• `TrackID` -> `TrackID...68`
• `ID` -> `ID...69`
• `X` -> `X...70`
• `Unit` -> `Unit...74`
• `Time` -> `Time...76`
• `TrackID` -> `TrackID...77`
• `ID` -> `ID...78`
• `X` -> `X...79`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Time` -> `Time...9`
• `TrackID` -> `TrackID...10`
• `ID` -> `ID...11`
• `X` -> `X...12`
• `Unit` -> `Unit...14`
• `Time` -> `Time...15`
• `TrackID` -> `TrackID...16`
• `ID` -> `ID...17`
• `X` -> `X...18`
• `Unit` -> `Unit...20`
• `Channel` -> `Channel...21`
• `Time` -> `Time...22`
• `TrackID` -> `TrackID...23`
• `ID` -> `ID...24`
• `X` -> `X...25`
• `Unit` -> `Unit...27`
• `Channel` -> `Channel...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Unit` -> `Unit...48`
• `Time` -> `Time...49`
• `TrackID` -> `TrackID...50`
• `ID` -> `ID...51`
• `X` -> `X...52`
• `Unit` -> `Unit...54`
• `Time` -> `Time...55`
• `TrackID` -> `TrackID...56`
• `ID` -> `ID...57`
• `X` -> `X...58`
• `Unit` -> `Unit...60`
• `Time` -> `Time...61`
• `TrackID` -> `TrackID...62`
• `ID` -> `ID...63`
• `X` -> `X...64`
• `Unit` -> `Unit...66`
• `Time` -> `Time...67`
• `TrackID` -> `TrackID...68`
• `ID` -> `ID...69`
• `X` -> `X...70`
• `Unit` -> `Unit...74`
• `Time` -> `Time...76`
• `TrackID` -> `TrackID...77`
• `ID` -> `ID...78`
• `X` -> `X...79`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Time` -> `Time...9`
• `TrackID` -> `TrackID...10`
• `ID` -> `ID...11`
• `X` -> `X...12`
• `Unit` -> `Unit...14`
• `Time` -> `Time...15`
• `TrackID` -> `TrackID...16`
• `ID` -> `ID...17`
• `X` -> `X...18`
• `Unit` -> `Unit...20`
• `Channel` -> `Channel...21`
• `Time` -> `Time...22`
• `TrackID` -> `TrackID...23`
• `ID` -> `ID...24`
• `X` -> `X...25`
• `Unit` -> `Unit...27`
• `Channel` -> `Channel...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Unit` -> `Unit...48`
• `Time` -> `Time...49`
• `TrackID` -> `TrackID...50`
• `ID` -> `ID...51`
• `X` -> `X...52`
• `Unit` -> `Unit...54`
• `Time` -> `Time...55`
• `TrackID` -> `TrackID...56`
• `ID` -> `ID...57`
• `X` -> `X...58`
• `Unit` -> `Unit...60`
• `Time` -> `Time...61`
• `TrackID` -> `TrackID...62`
• `ID` -> `ID...63`
• `X` -> `X...64`
• `Unit` -> `Unit...66`
• `Time` -> `Time...67`
• `TrackID` -> `TrackID...68`
• `ID` -> `ID...69`
• `X` -> `X...70`
• `Unit` -> `Unit...74`
• `Time` -> `Time...76`
• `TrackID` -> `TrackID...77`
• `ID` -> `ID...78`
• `X` -> `X...79`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Time` -> `Time...9`
• `TrackID` -> `TrackID...10`
• `ID` -> `ID...11`
• `X` -> `X...12`
• `Unit` -> `Unit...14`
• `Time` -> `Time...15`
• `TrackID` -> `TrackID...16`
• `ID` -> `ID...17`
• `X` -> `X...18`
• `Unit` -> `Unit...20`
• `Channel` -> `Channel...21`
• `Time` -> `Time...22`
• `TrackID` -> `TrackID...23`
• `ID` -> `ID...24`
• `X` -> `X...25`
• `Unit` -> `Unit...27`
• `Channel` -> `Channel...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Unit` -> `Unit...48`
• `Time` -> `Time...49`
• `TrackID` -> `TrackID...50`
• `ID` -> `ID...51`
• `X` -> `X...52`
• `Unit` -> `Unit...54`
• `Time` -> `Time...55`
• `TrackID` -> `TrackID...56`
• `ID` -> `ID...57`
• `X` -> `X...58`
• `Unit` -> `Unit...60`
• `Time` -> `Time...61`
• `TrackID` -> `TrackID...62`
• `ID` -> `ID...63`
• `X` -> `X...64`
• `Unit` -> `Unit...66`
• `Time` -> `Time...67`
• `TrackID` -> `TrackID...68`
• `ID` -> `ID...69`
• `X` -> `X...70`
• `Unit` -> `Unit...74`
• `Time` -> `Time...76`
• `TrackID` -> `TrackID...77`
• `ID` -> `ID...78`
• `X` -> `X...79`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Time` -> `Time...9`
• `TrackID` -> `TrackID...10`
• `ID` -> `ID...11`
• `X` -> `X...12`
• `Unit` -> `Unit...14`
• `Time` -> `Time...15`
• `TrackID` -> `TrackID...16`
• `ID` -> `ID...17`
• `X` -> `X...18`
• `Unit` -> `Unit...20`
• `Channel` -> `Channel...21`
• `Time` -> `Time...22`
• `TrackID` -> `TrackID...23`
• `ID` -> `ID...24`
• `X` -> `X...25`
• `Unit` -> `Unit...27`
• `Channel` -> `Channel...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Unit` -> `Unit...48`
• `Time` -> `Time...49`
• `TrackID` -> `TrackID...50`
• `ID` -> `ID...51`
• `X` -> `X...52`
• `Unit` -> `Unit...54`
• `Time` -> `Time...55`
• `TrackID` -> `TrackID...56`
• `ID` -> `ID...57`
• `X` -> `X...58`
• `Unit` -> `Unit...60`
• `Time` -> `Time...61`
• `TrackID` -> `TrackID...62`
• `ID` -> `ID...63`
• `X` -> `X...64`
• `Unit` -> `Unit...66`
• `Time` -> `Time...67`
• `TrackID` -> `TrackID...68`
• `ID` -> `ID...69`
• `X` -> `X...70`
• `Unit` -> `Unit...74`
• `Time` -> `Time...76`
• `TrackID` -> `TrackID...77`
• `ID` -> `ID...78`
• `X` -> `X...79`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Time` -> `Time...9`
• `TrackID` -> `TrackID...10`
• `ID` -> `ID...11`
• `X` -> `X...12`
• `Unit` -> `Unit...14`
• `Time` -> `Time...15`
• `TrackID` -> `TrackID...16`
• `ID` -> `ID...17`
• `X` -> `X...18`
• `Unit` -> `Unit...20`
• `Channel` -> `Channel...21`
• `Time` -> `Time...22`
• `TrackID` -> `TrackID...23`
• `ID` -> `ID...24`
• `X` -> `X...25`
• `Unit` -> `Unit...27`
• `Channel` -> `Channel...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Unit` -> `Unit...48`
• `Time` -> `Time...49`
• `TrackID` -> `TrackID...50`
• `ID` -> `ID...51`
• `X` -> `X...52`
• `Unit` -> `Unit...54`
• `Time` -> `Time...55`
• `TrackID` -> `TrackID...56`
• `ID` -> `ID...57`
• `X` -> `X...58`
• `Unit` -> `Unit...60`
• `Time` -> `Time...61`
• `TrackID` -> `TrackID...62`
• `ID` -> `ID...63`
• `X` -> `X...64`
• `Unit` -> `Unit...66`
• `Time` -> `Time...67`
• `TrackID` -> `TrackID...68`
• `ID` -> `ID...69`
• `X` -> `X...70`
• `Unit` -> `Unit...74`
• `Time` -> `Time...76`
• `TrackID` -> `TrackID...77`
• `ID` -> `ID...78`
• `X` -> `X...79`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Time` -> `Time...9`
• `TrackID` -> `TrackID...10`
• `ID` -> `ID...11`
• `X` -> `X...12`
• `Unit` -> `Unit...14`
• `Time` -> `Time...15`
• `TrackID` -> `TrackID...16`
• `ID` -> `ID...17`
• `X` -> `X...18`
• `Unit` -> `Unit...20`
• `Channel` -> `Channel...21`
• `Time` -> `Time...22`
• `TrackID` -> `TrackID...23`
• `ID` -> `ID...24`
• `X` -> `X...25`
• `Unit` -> `Unit...27`
• `Channel` -> `Channel...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Unit` -> `Unit...48`
• `Time` -> `Time...49`
• `TrackID` -> `TrackID...50`
• `ID` -> `ID...51`
• `X` -> `X...52`
• `Unit` -> `Unit...54`
• `Time` -> `Time...55`
• `TrackID` -> `TrackID...56`
• `ID` -> `ID...57`
• `X` -> `X...58`
• `Unit` -> `Unit...60`
• `Time` -> `Time...61`
• `TrackID` -> `TrackID...62`
• `ID` -> `ID...63`
• `X` -> `X...64`
• `Unit` -> `Unit...66`
• `Time` -> `Time...67`
• `TrackID` -> `TrackID...68`
• `ID` -> `ID...69`
• `X` -> `X...70`
• `Unit` -> `Unit...74`
• `Time` -> `Time...76`
• `TrackID` -> `TrackID...77`
• `ID` -> `ID...78`
• `X` -> `X...79`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
New names:
• `Time...3` -> `Time`
• `TrackID...4` -> `TrackID`
New names:
• `Time...3` -> `Time`
• `TrackID...4` -> `TrackID`
New names:
• `Time...3` -> `Time`
• `TrackID...4` -> `TrackID`
New names:
• `Time...3` -> `Time`
• `TrackID...4` -> `TrackID`
New names:
• `Time...3` -> `Time`
• `TrackID...4` -> `TrackID`
New names:
• `Time...3` -> `Time`
• `TrackID...4` -> `TrackID`
New names:
• `Time...3` -> `Time`
• `TrackID...4` -> `TrackID`
New names:
• `Time...3` -> `Time`
• `TrackID...4` -> `TrackID`
list.of.files.gfp$`20min` %>% 
  split(.$field)
$s1

$s2

$s3

$s4

$s5

$s6

$s7

$s8
NA

#Assigning the sample by to each field. There are two fields of autofluorescecne in this experiment. The neg.singal stands for the autofluorescence sample.

list.of.files.gfp[["20min"]] <- list.of.files.gfp[["20min"]] %>% 
  mutate(sample = ifelse(exp.field %in% c("20min_s1", "20min_s2"), "neg.signal", "pos.signal"))

#getting the imaris info of DAPI and pup1-rfp ##files to read (these will have rfp and dapi) ##Use the cells_surface data from Imaris #files to read

#reading the cell surface imaris files

# dapi_pup1_imaris_cells <- dir("~/Imaris-data/2022/proteasome_inhibition/2-23-22-PI/1uM/imaris/surface/cells", full.names = TRUE) 
# 
# list.of.files.dapi.pup1 <- get.imaris.info.dapi_pup1(dir.names = dapi_pup1_imaris_cells, 
#                                                      files_to_read = FilesToReadDAPIRFP)
# 
# unique(list.of.files.dapi.pup1$timepoint)

#getting the pup1-rfp puncta info ##use the pup1_surface info from Imaris

FilesToReadDAPIRFP <- c("C0_Area", 
            "C0_BoundingBoxOO_Length_B",
            "C0_BoundingBoxOO_Length_C",
            "C0_Ellipsoid_Axis_Length_B",
            "C0_Ellipsoid_Axis_Length_C",
            "C0_Intensity_Center_Ch=4",
            "C0_Intensity_Mean_Ch=4", 
            "C0_Intensity_Median_Ch=4",
            "C0_Intensity_Sum_Ch=4",
            "C0_Intensity_Center_Ch=5",
            "C0_Intensity_Mean_Ch=5", 
            "C0_Intensity_Median_Ch=5",
            "C0_Intensity_Sum_Ch=5",
            "C0_Number_of_Voxels", 
            "C0_Number_of_Triangles",
            "C0_Sphericity", 
            "C0_Volume.csv", 
            "C0_Position_X.csv",
            "C0_Position_Y.csv",
            "C0_Intensity_Max_Ch=6",
            "C0_Intensity_Center_Ch=6")

#first get the info of the cell surface then match each cell surface with the pup1 puncta. do not include the MRG cells as they have no pup1-rfp puncta mask

dapi_pup1_imaris_cells <- dir("~/Imaris-data/2022/pup1_rfp/10-7-22/stable/imaris/surface/cells", full.names = TRUE) 

list.of.files.dapi.pup1 <- get.imaris.info.dapi_pup1.surface(dir.names = dapi_pup1_imaris_cells, files_to_read = FilesToReadDAPIRFP) #updated this function to not include trackIDs
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
list.of.files.dapi.pup1 <- list.of.files.dapi.pup1 %>%
    mutate(timepoint = ifelse(timepoint == 2,31,timepoint))
list.of.files.dapi.pup1 %>% split(.$timepoint)
$`1`

$`31`
NA

#Getting the pup1 puncta surface info

pup1_surface_imaris <- dir("~/Imaris-data/2022/pup1_rfp/10-7-22/stable/imaris/surface/pup1", full.names = TRUE) 

pup1_puncta <- get.imaris.info.dapi_pup1.surface(dir.names = pup1_surface_imaris[3:8], 
                                                 files_to_read = FilesToReadDAPIRFP) 
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning in stri_split_regex(string, pattern, n = n, simplify = simplify,  :
  argument is not an atomic vector; coercing
New names:
• `Unit` -> `Unit...2`
• `Time` -> `Time...3`
• `TrackID` -> `TrackID...4`
• `ID` -> `ID...5`
• `X` -> `X...6`
• `Unit` -> `Unit...8`
• `Collection` -> `Collection...9`
• `Time` -> `Time...10`
• `TrackID` -> `TrackID...11`
• `ID` -> `ID...12`
• `X` -> `X...13`
• `Unit` -> `Unit...15`
• `Collection` -> `Collection...16`
• `Time` -> `Time...17`
• `TrackID` -> `TrackID...18`
• `ID` -> `ID...19`
• `X` -> `X...20`
• `Unit` -> `Unit...22`
• `Time` -> `Time...23`
• `TrackID` -> `TrackID...24`
• `ID` -> `ID...25`
• `X` -> `X...26`
• `Unit` -> `Unit...28`
• `Time` -> `Time...29`
• `TrackID` -> `TrackID...30`
• `ID` -> `ID...31`
• `X` -> `X...32`
• `Intensity.Center` -> `Intensity.Center...33`
• `Unit` -> `Unit...34`
• `Channel` -> `Channel...35`
• `Time` -> `Time...36`
• `TrackID` -> `TrackID...37`
• `ID` -> `ID...38`
• `X` -> `X...39`
• `Intensity.Mean` -> `Intensity.Mean...40`
• `Unit` -> `Unit...41`
• `Channel` -> `Channel...42`
• `Time` -> `Time...43`
• `TrackID` -> `TrackID...44`
• `ID` -> `ID...45`
• `X` -> `X...46`
• `Intensity.Median` -> `Intensity.Median...47`
• `Unit` -> `Unit...48`
• `Channel` -> `Channel...49`
• `Time` -> `Time...50`
• `TrackID` -> `TrackID...51`
• `ID` -> `ID...52`
• `X` -> `X...53`
• `Intensity.Sum` -> `Intensity.Sum...54`
• `Unit` -> `Unit...55`
• `Channel` -> `Channel...56`
• `Time` -> `Time...57`
• `TrackID` -> `TrackID...58`
• `ID` -> `ID...59`
• `X` -> `X...60`
• `Intensity.Center` -> `Intensity.Center...61`
• `Unit` -> `Unit...62`
• `Channel` -> `Channel...63`
• `Time` -> `Time...64`
• `TrackID` -> `TrackID...65`
• `ID` -> `ID...66`
• `X` -> `X...67`
• `Intensity.Mean` -> `Intensity.Mean...68`
• `Unit` -> `Unit...69`
• `Channel` -> `Channel...70`
• `Time` -> `Time...71`
• `TrackID` -> `TrackID...72`
• `ID` -> `ID...73`
• `X` -> `X...74`
• `Intensity.Median` -> `Intensity.Median...75`
• `Unit` -> `Unit...76`
• `Channel` -> `Channel...77`
• `Time` -> `Time...78`
• `TrackID` -> `TrackID...79`
• `ID` -> `ID...80`
• `X` -> `X...81`
• `Intensity.Sum` -> `Intensity.Sum...82`
• `Unit` -> `Unit...83`
• `Channel` -> `Channel...84`
• `Time` -> `Time...85`
• `TrackID` -> `TrackID...86`
• `ID` -> `ID...87`
• `X` -> `X...88`
• `Unit` -> `Unit...90`
• `Time` -> `Time...91`
• `TrackID` -> `TrackID...92`
• `ID` -> `ID...93`
• `X` -> `X...94`
• `Unit` -> `Unit...96`
• `Time` -> `Time...97`
• `TrackID` -> `TrackID...98`
• `ID` -> `ID...99`
• `X` -> `X...100`
• `Unit` -> `Unit...102`
• `Time` -> `Time...103`
• `TrackID` -> `TrackID...104`
• `ID` -> `ID...105`
• `X` -> `X...106`
• `Unit` -> `Unit...108`
• `Time` -> `Time...109`
• `TrackID` -> `TrackID...110`
• `ID` -> `ID...111`
• `X` -> `X...112`
• `Unit` -> `Unit...114`
• `Collection` -> `Collection...115`
• `Time` -> `Time...116`
• `TrackID` -> `TrackID...117`
• `ID` -> `ID...118`
• `X` -> `X...119`
• `Unit` -> `Unit...121`
• `Collection` -> `Collection...122`
• `Time` -> `Time...123`
• `TrackID` -> `TrackID...124`
• `ID` -> `ID...125`
• `X` -> `X...126`
• `Unit` -> `Unit...128`
• `Channel` -> `Channel...129`
• `Time` -> `Time...130`
• `TrackID` -> `TrackID...131`
• `ID` -> `ID...132`
• `X` -> `X...133`
• `Intensity.Center` -> `Intensity.Center...134`
• `Unit` -> `Unit...135`
• `Channel` -> `Channel...136`
• `Time` -> `Time...137`
• `TrackID` -> `TrackID...138`
• `ID` -> `ID...139`
• `X` -> `X...140`
Warning: Problem while computing `experiment = ...[]`.
ℹ argument is not an atomic vector; coercing
Warning: Problem while computing `sample = ...[]`.
ℹ argument is not an atomic vector; coercing
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
New names:
• `Intensity.Center...33` -> `Intensity.Center...1`
• `Intensity.Mean...40` -> `Intensity.Mean...2`
• `Intensity.Median...47` -> `Intensity.Median...3`
• `Intensity.Sum...54` -> `Intensity.Sum...4`
• `Intensity.Center...61` -> `Intensity.Center...5`
• `Intensity.Mean...68` -> `Intensity.Mean...6`
• `Intensity.Median...75` -> `Intensity.Median...7`
• `Intensity.Sum...82` -> `Intensity.Sum...8`
• `Intensity.Center...134` -> `Intensity.Center...10`
• `Time...3` -> `Time`
pup1_puncta <- pup1_puncta %>% 
  mutate(timepoint = ifelse(timepoint == 2,31,timepoint))

pup1_puncta %>% split(.$timepoint)
$`1`

$`31`
NA

#combine the cell surface info with the pup1 puncta info.

#this should have 11159 no. of cells 
pup1.dapi.cell.puncta <- list.of.files.dapi.pup1 %>% #df with entire cell segmented 
  select(
    area,
    pos.x,
    pos.y,
    timepoint,
    all.mask.int.max,
    all.mask.int.center,
    rfp.int.mean,
    rfp.int.median,
    rfp.int.sum,
    dapi.int.mean,
    dapi.int.median,
    dapi.int.sum,
    experiment,
    field
  ) %>% 
  left_join(
    .,
    pup1_puncta %>%        #df with the pup1 puncta segmented 
      select(
        rfp.int.center,
        rfp.int.mean,
        rfp.int.median,
        rfp.int.sum,
        dapi.int.mean,
        dapi.int.sum,
        dapi.int.median,
        all.mask.int.max,
        all.mask.int.center,
        area,
        timepoint,
        experiment,
        field,
        no.of.voxels
      ) %>% rename("area.puncta" = "area",
                   "rfp.center.puncta" = "rfp.int.center",
                   "rfp.mean.puncta" = "rfp.int.mean",
                   "rfp.sum.puncta" = "rfp.int.sum",
                   "rfp.median.puncta" = "rfp.int.median",
                   "dapi.mean.puncta" = "dapi.int.mean",
                   "dapi.sum.puncta" = "dapi.int.sum",
                   "dapi.median.puncta" = "dapi.int.median",
                   "no.of.voxels.puncta" = "no.of.voxels"),
     by = c("all.mask.int.max" , 
            "experiment" , 
            "field" , 
            "timepoint" , 
            "all.mask.int.center")
  )


  
#this has 6514 cells. some cells have multiple puncta. maybe just drop the cells. 

#combine the cell surface + pup1 puncta info of the pup1 expressing cells with all the cell surface information. There will be NAs in the columns with puncta in their names for the neg cells

# pup1.dapi.all <- list.of.files.dapi.pup1 %>% 
#   left_join(.,pup1.dapi.cell.puncta %>% 
#               select(.,area, 
#                      pos.x, 
#                      pos.y,
#                      timepoint,
#                      experiment, 
#                      field, 
#                      rfp.center.puncta, rfp.mean.puncta, rfp.median.puncta, rfp.sum.puncta,
#                      dapi.mean.puncta,dapi.sum.puncta, dapi.median.puncta,
#                      area.puncta, no.of.voxels.puncta), 
#             by = c("area","pos.x","pos.y","timepoint", "experiment", "field"))
# 
# pup1.dapi.all

#dont need to do this. 

Combining the GFP intensities with the rfp puncta info at t = 1

cell_atributes <- list.of.files.gfp$`20min` %>% 
  filter(timepoint %in% c(1,32)) %>% 
  left_join(.,pup1.dapi.cell.puncta %>% select(-all.mask.int.max,
                                               -all.mask.int.center) ,
            by = c("area",
                   "timepoint",
                   "pos.x",
                   "pos.y",
                   "experiment",
                   "field"))

cell_atributes %>% 
  # filter(unique.trackID == "1000001774_20min_s3")
    dplyr::group_by(field, unique.trackID, timepoint) %>%
    dplyr::summarise(n = dplyr::n(), .groups = "drop") %>%
    dplyr::filter(n > 1L)
#6440 cells. There are 6 cells with multiple pup1 puncta. maybe drop these cells just for simplicity purposes. 

#Background subtraction

gfp.bg.mean$`20min` %>% 
  arrange(field, timepoint) %>% 
  split(.$field) 
$s1

$s2

$s3

$s4

$s5

$s6

$s7

$s8
NA

#gfp background for s1 and s2 samples:

s1.2gfp.bg_files <- list.files("~/Imaris-data/2022/pup1_rfp/10-7-22/cln2/background/bg_gfp_s1_s2", full.names = T)

gfp.bg.mean.s1.2<- lapply(s1.2gfp.bg_files, function(a){
  read.csv(a) %>% 
  mutate(field = str_split(Label, "_", simplify = T)[,ncol(str_split(Label, "_", simplify = T))-2],
         timepoint = as.numeric(str_remove(str_split(Label, "_", simplify = T)[,ncol(str_split(Label, "_", simplify = T))-1], "t"))) %>% 
  select(field,
         timepoint,
         Mean,
         Min) %>% 
  group_by(timepoint, field) %>% 
  summarise(avg.gfp.bg = mean(Mean))
}) %>% bind_rows()
`summarise()` has grouped output by 'timepoint'. You can override using the `.groups` argument.
`summarise()` has grouped output by 'timepoint'. You can override using the `.groups` argument.
`summarise()` has grouped output by 'timepoint'. You can override using the `.groups` argument.
gfp.bg.mean$`20min` <- gfp.bg.mean$`20min` %>% 
  left_join(.,gfp.bg.mean.s1.2, by = c("field", "timepoint")) %>% 
  mutate(avg.gfp.bg = ifelse(is.na(avg.gfp.bg), Mean_gfp, avg.gfp.bg)) 

gfp.bg.mean$`20min` %>% 
  group_by(field) %>% 
  arrange(field, timepoint)
s1.2rfp.dapi <- list.files("~/Imaris-data/2022/pup1_rfp/10-7-22/cln2/background/bg_mcherry_dapi_s1_s2", full.names = T)

rfp.bg.mean.s1.2 <- lapply(s1.2rfp.dapi, function(a){
  read.csv(a) %>%
  mutate(field = str_split(Label, "_", simplify = T)[,ncol(str_split(Label, "_", simplify = T))-2],
         timepoint = as.numeric(str_remove(str_split(Label, "_", simplify = T)[,ncol(str_split(Label, "_", simplify = T))-1], "t")),
          channel = str_split(Label, "_", simplify = T)[,ncol(str_split(Label, "_", simplify = T))]) %>%
  mutate(channel = ifelse(channel == "C4", "Dapi", "mcherry")) %>%
  select(field,
         timepoint,
         channel,
         Mean,
         Min) %>%
  group_by(timepoint, field, channel) %>%
  summarise(avg.gfp.bg = mean(Mean)) %>%
  pivot_wider(names_from = channel,
              values_from = avg.gfp.bg)
}) %>% bind_rows()
`summarise()` has grouped output by 'timepoint', 'field'. You can override using the `.groups` argument.
`summarise()` has grouped output by 'timepoint', 'field'. You can override using the `.groups` argument.
`summarise()` has grouped output by 'timepoint', 'field'. You can override using the `.groups` argument.
rfp.dapi.bg.means$`20min` <- rfp.dapi.bg.means$`20min` %>%
  left_join(.,rfp.bg.mean.s1.2, by = c("field", "timepoint")) %>%
  mutate(Dapi = ifelse(is.na(Dapi), avg.dapi.bg, Dapi),
         mcherry = ifelse(is.na(mcherry), avg.rfp.bg, mcherry)) %>%
  select(-avg.dapi.bg,
         -avg.rfp.bg) %>%
  rename("avg.dapi.bg" = "Dapi",
         "avg.rfp.bg" = "mcherry")

#actually subtract the background intensity from the gfp and mcherry intensity of the cells

#combine the background subtracted gfp dataframe with the bg subtracted rfp/dapi total and puncta dfs

gfp.rfp.dapi.bg.sub <- gfp.bg.sub$`20min` %>% 
  filter(timepoint %in% c(1,32)) %>% 
  select(unique.trackID,
         gfp.mean.bg.sub,
         gfp.sum.bg.sub,
         avg.gfp.bg,
         area,
         pos.x,
         pos.y) %>% 
  left_join(.,rfp.dapi.bg.sub$`20min`, by = c("unique.trackID", "area","pos.x","pos.y")) %>% split(.$experiment)

#filtering cells which have negative background subtracted intensities

#Uniqe trackIDs of cells above the background int for gfp, dapi and rfp 
#this function results in a list of two dfs. the 1st df = uniquetrackIDs with the experiment they're from.
listOfUniqtrackID_gfpfiltereddf <- trackID.abv.zero.gfp.rfp.dapi(
  bg_subtracted_dftp1 = gfp.rfp.dapi.bg.sub,
  list_gfp_all_tps = gfp.bg.sub)
#the df with gfp intensities for all timepoints which is filtered for cells gfp.mean.bg.sub > 0 
list.of.files.bg.sub.above.0.gfp <- listOfUniqtrackID_gfpfiltereddf[[2]] %>% 
  split(.$experiment)

#removing cells with negative background subtracted intensities from the dataframe with the cell info from timepoint 1 and the last timepoint

gfp_rfp_dapi_bgsubAbvZero_tp1 <- listOfUniqtrackID_gfpfiltereddf[[1]] %>% 
  left_join(.,bind_rows(gfp.rfp.dapi.bg.sub) , by = c("unique.trackID", "experiment"))

gfp_rfp_dapi_bgsubAbvZero_tp1 %>% 
  group_by(timepoint, exp.field) %>% 
  tally()

list.of.files.bg.sub.above.0.gfp$`20min`%>% 
  group_by(timepoint, exp.field) %>% tally()

#density plot of the DAPI staining. Higher DAPI staining == dead cells

#at the first timepoint
gfp_rfp_dapi_bgsubAbvZero_tp1  %>% 
  ggplot(.,aes(x = dapi.mean.bg.sub, color = as.factor(timepoint)))+
  geom_density(aes(y=..scaled..))+
  facet_wrap(~field, scales = "free_x")+
  scale_x_log10()+
  theme_pubr(x.text.angle = 45)
Warning in self$trans$transform(x) : NaNs produced
Warning: Transformation introduced infinite values in continuous x-axis
Warning: Removed 283 rows containing non-finite values (stat_density).

#get the threshold of dapi above which the cells will be deemed dead!!

#split the df into the experiments so that there is a dead cell threshold for every experiment 
deadcell_temp_df <- gfp_rfp_dapi_bgsubAbvZero_tp1 %>% 
  split(.$experiment) 


deadCell_boundry <- dapi.threshold(df_for_threshold = deadcell_temp_df , lower_lim = 100, uppr_lim = 300 ) %>% 
  rename("exp.field" = "experiment")
Warning in self$trans$transform(x) : NaNs produced
Warning: Transformation introduced infinite values in continuous x-axis
Warning: Removed 50 rows containing non-finite values (stat_density).
Warning in self$trans$transform(x) : NaNs produced
Warning: Transformation introduced infinite values in continuous x-axis
Warning: Removed 16 rows containing non-finite values (stat_density).
Warning in self$trans$transform(x) : NaNs produced
Warning: Transformation introduced infinite values in continuous x-axis
Warning: Removed 185 rows containing non-finite values (stat_density).
Warning in self$trans$transform(x) : NaNs produced
Warning: Transformation introduced infinite values in continuous x-axis
Warning: Removed 9 rows containing non-finite values (stat_density).
Warning in self$trans$transform(x) : NaNs produced
Warning: Transformation introduced infinite values in continuous x-axis
Warning: Removed 6 rows containing non-finite values (stat_density).
Warning in self$trans$transform(x) : NaNs produced
Warning: Transformation introduced infinite values in continuous x-axis
Warning: Removed 2 rows containing non-finite values (stat_density).
Warning in self$trans$transform(x) : NaNs produced
Warning: Transformation introduced infinite values in continuous x-axis
Warning: Removed 12 rows containing non-finite values (stat_density).
Warning in self$trans$transform(x) : NaNs produced
Warning: Transformation introduced infinite values in continuous x-axis
Warning: Removed 3 rows containing non-finite values (stat_density).
#at the first timepoint
gfp_rfp_dapi_bgsubAbvZero_tp1 %>% 
  filter(timepoint == 1) %>% 
  left_join(.,deadCell_boundry , by = "exp.field") %>% 
  ggplot(.,aes(x = dapi.mean.bg.sub, color = sample))+
  geom_density(aes(y=..scaled..))+
  geom_vline(data= deadCell_boundry, aes(xintercept = dapi.threshold))+
  facet_wrap(~exp.field, scales = "free_x")+
  scale_x_log10()+
  annotation_logticks()+
  theme_pubr(x.text.angle = 45)
Warning in self$trans$transform(x) : NaNs produced
Warning: Transformation introduced infinite values in continuous x-axis
Warning: Removed 283 rows containing non-finite values (stat_density).

#removing cells with dapi intensity greater than the dapi threshold set

#getting the IDs of the cells remaining after removing the cells with higher than threshold dapi intensity. use this to filter cells from the df with mcherry and gfp timelapse information
#will remove dead cells from the first timepoint 
dapi.filtered.cellsTrackID <- bind_rows(deadcell_temp_df) %>% 
  filter(timepoint %in% c(1,32)) %>% 
  left_join(.,deadCell_boundry, by = "exp.field") %>% 
  filter(dapi.mean.bg.sub < dapi.threshold) %>% pull(unique.trackID)

#df with fluorescent intensities of gfp, rfp and dapi for live cells at tp =1 ant tp = 31.
liveCellsRFP.DAPI.GFP <- gfp_rfp_dapi_bgsubAbvZero_tp1 %>% 
  left_join(.,deadCell_boundry, by = "exp.field") %>% 
  filter(dapi.mean.bg.sub < dapi.threshold)


#df with dead cells removed this df has gfp intensities for all the timepoint which are filtered for dead cells 
new.gfpLiveCells <-  bind_rows(list.of.files.bg.sub.above.0.gfp) %>% 
  filter(unique.trackID %in% liveCellsRFP.DAPI.GFP$unique.trackID)

#saving the dataframe with the background subtracted, dead cells filtered intensities of gfps from the autofluor cells (MRG) and the gfp positive cells.

new.gfpLiveCells %>% 
  write_csv(.,path = "~/plots/pup1-rfp-gfp-decay/10-7-22-stable-gfp/data/raw_gfp_int_all.csv")
Warning: The `path` argument of `write_csv()` is deprecated as of readr 1.4.0.
Please use the `file` argument instead.
This warning is displayed once every 8 hours.
Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.

looking at the distribution of rfp and gfp in the live cells

#autofluorescence vs gfp signal 
liveCellsRFP.DAPI.GFP %>% 
  filter(timepoint == 1) %>% 
  ggplot(.,aes(x = gfp.mean.bg.sub))+
  geom_histogram()+
  scale_x_log10()+
  facet_wrap(~field, scales = "free")
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#plotting line plots raw without any AF filtering

Fix background for s1 and s2: fixed background intensities of s1, s3, 4 till s8.

#Filtering cells based on autofluorescence

##getting the autofluorescence threshold for gfp and mcherry

bind_rows(new.gfpLiveCells) %>% 
  filter(experiment == "20min") %>% 
  ggplot(.,aes(x = gfp.mean.bg.sub, color = sample))+
  geom_density(aes(y = ..scaled..))+
  facet_wrap(~timepoint , scales = "free_x")+
  scale_x_log10()
Warning in self$trans$transform(x) : NaNs produced
Warning: Transformation introduced infinite values in continuous x-axis
Warning: Removed 7497 rows containing non-finite values (stat_density).

#filtering based on pup1-rfp expression ##filtering cells which are above the gfp and rfp threshold In the filter.cells.below.autofluor.31tp.gfpV2() function, the function looks for the column named “threshold” and I need to decide which column will be threshold based on the overlap of the neg and positive cells. This is because there are cells which become dead/become in focus as you keep taking images which might suddenly increase the 95th quantile intensity of the negative cells.

#get a filtered df of cells passing the gfp threshold set above 
#this function below first removes cells with pup1-rfp less than the threshold set. 
#Then it removes the cells with less than AF threshold set at tp =1 
#After that it subtracts the af value from every cell for every timepoint, and if the subtracted value is less than 1 it makes it NA. 

cells.filtered.df.31tp <- filter.cells.below.autofluor.31tp.gfpV2(
  df_rfp_dapi_gfp = liveCellsRFP.DAPI.GFP,
  
  rfp_min_int = rfp.min.int %>% rename("quant_95" = "threshold_95", 
                                       "threshold_95" = "pup1_threshold"),
  
  gfp_live_cells_list = new.gfpLiveCells %>% split(.$experiment),
  
  gfp_min_int = gfp.min.int %>% 
    mutate(threshold = threshold_95 )
)

filtered.df.new.wo.af.31tp <- cells.filtered.df.31tp$filtered.df.new %>% 
  bind_rows() %>% 
  filter(sample == "pos.signal") %>% 
  split(.$experiment)

unique(filtered.df.new.wo.af.31tp$`20min`$timepoint)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
  

remove the first two blurry images from s7

# filtered.df.new.wo.af.31tp$`20min` <- filtered.df.new.wo.af.31tp$`20min` %>% filter(field == "s7")
#   filter(!(field == "s7" & timepoint %in% c(1,2))) 

#making df for bulk regression

###This function creats the df for fitting the 24 models 
# list.df.model <- df.model(filtered.df.new = filtered.df.new.wo.af)
df.model.31tp.gfp <- df.model.gfp(filtered.df.new = filtered.df.new.wo.af.31tp)
df.model.31tp.gfp

####This function cleans up the df where you subtract the t=0 intensity with all the other intensities for gfp
final.data.31tp.gfp <- clean.df.modeling.gfp(data.gfp = df.model.31tp.gfp)

On 1/28/21 talked to premal about filtering: 1. Remove cells which have positive delta Intensity more than 2 times

#getting IDs of cells which have positive intensity values for less than 2 timepoints 
ids.int.2 <- final.data.31tp.gfp %>% 
  group_by(unique.trackID) %>% 
  tally(ln.gfp.dif > 0) %>% 
  filter(n<2) %>%            #keep cells which have less than two positive intensity values
  pull(unique.trackID)

#filtering cells which have trackID in the above vector  
#gfp
temp.posIntBlw2.gfp <- final.data.31tp.gfp %>% 
  filter(unique.trackID %in% ids.int.2) 

df_for_MechanisticModel <- temp.posIntBlw2.gfp  %>%
  left_join(
    .,
    bind_rows(filtered.df.new.wo.af.31tp) ,
    by = c(
      "unique.trackID",
      "timepoint" ,
      "experiment" ,
      "gfp.mean.bg.af.sub.new" ,
      "exp.field"
    )
  )

#save this dataframe for half life estimation
cell_atributes_final <- df_for_MechanisticModel %>% 
  filter(timepoint == 1)  %>% 
  left_join(.,liveCellsRFP.DAPI.GFP %>% select(unique.trackID,
                                               timepoint,
                                               exp.field,experiment,
                                               rfp.mean.bg.sub,
                                               rfp.mean.bg.sub.puncta,
                                               dapi.mean.bg.sub,
                                               dapi.mean.bg.sub.puncta,
                                               rfp.sum.bg.sub,
                                               rfp.sum.bg.sub.puncta,
                                               dapi.sum.bg.sub,
                                               dapi.sum.bg.sub.puncta,
                                               area.puncta), 
            by = c("unique.trackID", "timepoint", "exp.field", "experiment")) 

cell_atributes_final %>% group_by(exp.field) %>% tally()

write_csv(cell_atributes_final,file = "/home/Das/plots/pup1-rfp-gfp-decay/10-7-22-stable-gfp/data/10-7-22_stable_pup1_attributes.csv")
  

#saving the data

gfp_stable_filtered <- df_for_MechanisticModel  %>%
  rename("cell.id" = "unique.trackID",
         "gfpSumBgAFsub" = "gfp.sum.bg.af.sub",
         "gfpMeanBgAFsub"="gfp.mean.bg.af.sub.new",
         "nat.log.GfpMean" = "ln.gfp" , 
         "delta.int" = "ln.gfp.dif",
         "delta.time" = "time"
         ) %>% 
  select( cell.id,
         gfpSumBgAFsub,
         gfpMeanBgAFsub,
         nat.log.GfpMean,
         delta.time,
         image.no,
         delta.int, 
         exp.field
         )

write_csv(gfp_stable_filtered , file = "~/plots/pup1-rfp-gfp-decay/10-7-22-stable-gfp/data/gfp_stable_pup1_filtered.csv")

#SAVING THE DATAFRAME WHICH HAS ALL THE BACKGROUND INT, AUTOFLUOR INTENSITY (AT THE INTERSECTION, THE 80TH AND THE 95TH QUANTILE OF MRG AUTO GFP INTENSITY)

write_csv(df_for_MechanisticModel , file = "~/plots/pup1-rfp-gfp-decay/10-7-22-stable-gfp/data/gfp_stable_pup1_raw_data.csv")
gfp_stable_filtered %>% 
  ggplot(.,aes(delta.time, gfpMeanBgAFsub, group = cell.id))+
  geom_line(alpha = 0.2)+
  facet_wrap(~exp.field, scales = "free_y")

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQotLS0KdGl0bGU6ICIxMC03LTIyIGNsbjItZ2ZwIHB1cDEtcmZwIGRlY2F5IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgoKT25seSAyMG1pbiB0aW1lbGFwc2UgYmVjYXVzZSB3ZSBjb25jbHVkZWQgdGhhdCB3ZSB3b250IGJlIGFibGUgdG8gZGVjb3VwbGUgcGhvdG9ibGVhY2hpbmcgZnJvbSBwcm90ZWFzb21hbCBkZWNheQoKdGhpcyBSTUQgaXMgdG8gZ2VuZXJhdGUgdGhlIGRmIGZvciBkZWNheSByYXRlIGVzdGltYXRpb24gZm9yIHRoZSBETVNPIGNvbnRyb2wKCmBgYHtyfQpsaWJyYXJ5KGRhdGEudGFibGUpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHJlc2hhcGUyKQpsaWJyYXJ5KGdnYW5pbWF0ZSkKbGlicmFyeShnZ3JpZGdlcykKbGlicmFyeShnZ3B1YnIpCmBgYAoKYGBge3J9CnNvdXJjZSgifi9SLXNjcmlwdHMvUl9mdW5jdGlvbnMvbWFzdGVyLTItMy0yMi5SIikKYGBgCgojZ2V0dGluZyB0aGUgaW5mb3JtYXRpb24gZm9yIGltYXJpcyBmaWxlcwojI2ZpbGVzIHRvIHJlYWQgZnJvbSBJbWFyaXMKYGBge3J9CkZpbGVzVG9SZWFkIDwtIGMoIkMwX0FyZWEiLCAKICAgICAgICAgICAgIkMwX0VsbGlwc29pZF9BeGlzX0xlbmd0aF9CIiwKICAgICAgICAgICAgIkMwX0VsbGlwc29pZF9BeGlzX0xlbmd0aF9DIiwKICAgICAgICAgICAgIkMwX0ludGVuc2l0eV9DZW50ZXJfQ2g9MyIsCiAgICAgICAgICAgICJDMF9JbnRlbnNpdHlfTWVhbl9DaD0zIiwgCiAgICAgICAgICAgICJDMF9JbnRlbnNpdHlfTWVkaWFuX0NoPTMiLAogICAgICAgICAgICAiQzBfSW50ZW5zaXR5X1N1bV9DaD0zIiwKICAgICAgICAgICAgIkMwX051bWJlcl9vZl9Wb3hlbHMiLCAKICAgICAgICAgICAgIkMwX051bWJlcl9vZl9UcmlhbmdsZXMiLAogICAgICAgICAgICAiQzBfU3BoZXJpY2l0eSIsIAogICAgICAgICAgICAiQzBfVm9sdW1lLmNzdiIsIAogICAgICAgICAgICAiQzBfUG9zaXRpb24uY3N2IiApCmBgYAojI2FjdHVhbCByZWFkaW5nIGFuZCBtYWtpbmcgdGhlbSBpbnRvIGRmIApgYGB7cn0KIyMjI01HMTMyCiNHZXR0aW5nIHRoZSBsaXN0IG9mIGFsbCB0aGUgc2FtcGxlcyBpbiB0aGUgZXhwZXJpbWVudCAKZ2ZwX2ltYXJpcyA8LSBkaXIoIn4vSW1hcmlzLWRhdGEvMjAyMi9wdXAxX3JmcC8xMC03LTIyL3N0YWJsZS9pbWFyaXMvZ2ZwIiwgZnVsbC5uYW1lcyA9IFRSVUUpCgojZ2V0dGluZyB0aGUgaW5mb3JtYXRpb24gZm9yIGltYWdlSiBpbWFnZSBpbmZvIGZpbGVzCiNnZXR0aW5nIGFsbCB0aGUgaW1hZ2UgaW5mbyB0eHQgZm9yIGFsbCB0aGUgaW1hZ2VzIGluIHRoZSBleHBlcmltZW50LiAKbGlzdC5pbWFnZS5pbmZvIDwtIGxpc3QuZmlsZXMoIn4vSW1hcmlzLWRhdGEvMjAyMi9wdXAxX3JmcC8xMC03LTIyL3N0YWJsZS9pbWFnZV9pbWZvX2ltYWdlSiIgLCBmdWxsLm5hbWVzID0gVFJVRSkKCiNFeHRyYWN0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGltYWdlSiBjc3YgaW50byBhIGRmIHdpdGggYWN0dWFsIHRpbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiBlYWNoIGltYWdlcyAKcmVhbC50aW1lLmludGVydmFsLmRmIDwtIGdldC5pbWFnZS5pbmZvLk9ubHlHRlAobGlzdC5pbWFnZS5pbmZvID0gbGlzdC5pbWFnZS5pbmZvKSAgICAgIAoKI0V4dHJhY3RpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW1hcmlzIGNzdiBpbnRvIGEgZGYgd2l0aCBpbmZvcm1hdGlvbiBvbiBhcmVhLCB0aW1lLCBnZnAgaW50ZW5zaXR5LCBtY2hlcnJ5IGludGVuc2l0eSwgKG1lYW4sIG1lZGlhbiBhbmQgc3VtKSwgdm9sdW1lLCB0cmFja0lEIGFuZCBJRHMKbGlzdC5vZi5maWxlcy5nZnAgPC0gZ2V0LmltYXJpcy5pbmZvLm9ubHlHRlAoIGRpci5uYW1lcyA9IGdmcF9pbWFyaXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNfdG9fcmVhZCA9IEZpbGVzVG9SZWFkICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWwudGltZS5pbnRlcnZhbC5kZiA9IHJlYWwudGltZS5pbnRlcnZhbC5kZikKCmxpc3Qub2YuZmlsZXMuZ2ZwJGAyMG1pbmAgJT4lIAogIHNwbGl0KC4kZmllbGQpCgoKYGBgCgoKCiNBc3NpZ25pbmcgdGhlIHNhbXBsZSBieSB0byBlYWNoIGZpZWxkLiBUaGVyZSBhcmUgdHdvIGZpZWxkcyBvZiBhdXRvZmx1b3Jlc2NlY25lIGluIHRoaXMgZXhwZXJpbWVudC4gVGhlIG5lZy5zaW5nYWwgc3RhbmRzIGZvciB0aGUgYXV0b2ZsdW9yZXNjZW5jZSBzYW1wbGUuIApgYGB7cn0KbGlzdC5vZi5maWxlcy5nZnBbWyIyMG1pbiJdXSA8LSBsaXN0Lm9mLmZpbGVzLmdmcFtbIjIwbWluIl1dICU+JSAKICBtdXRhdGUoc2FtcGxlID0gaWZlbHNlKGV4cC5maWVsZCAlaW4lIGMoIjIwbWluX3MxIiwgIjIwbWluX3MyIiksICJuZWcuc2lnbmFsIiwgInBvcy5zaWduYWwiKSkKCmBgYAoKCgojZ2V0dGluZyB0aGUgaW1hcmlzIGluZm8gb2YgREFQSSBhbmQgcHVwMS1yZnAgCiMjZmlsZXMgdG8gcmVhZCAodGhlc2Ugd2lsbCBoYXZlIHJmcCBhbmQgZGFwaSkKIyNVc2UgdGhlIGNlbGxzX3N1cmZhY2UgZGF0YSBmcm9tIEltYXJpcwojZmlsZXMgdG8gcmVhZAoKI3JlYWRpbmcgdGhlIGNlbGwgc3VyZmFjZSBpbWFyaXMgZmlsZXMgCmBgYHtyfQojIGRhcGlfcHVwMV9pbWFyaXNfY2VsbHMgPC0gZGlyKCJ+L0ltYXJpcy1kYXRhLzIwMjIvcHJvdGVhc29tZV9pbmhpYml0aW9uLzItMjMtMjItUEkvMXVNL2ltYXJpcy9zdXJmYWNlL2NlbGxzIiwgZnVsbC5uYW1lcyA9IFRSVUUpIAojIAojIGxpc3Qub2YuZmlsZXMuZGFwaS5wdXAxIDwtIGdldC5pbWFyaXMuaW5mby5kYXBpX3B1cDEoZGlyLm5hbWVzID0gZGFwaV9wdXAxX2ltYXJpc19jZWxscywgCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc190b19yZWFkID0gRmlsZXNUb1JlYWREQVBJUkZQKQojIAojIHVuaXF1ZShsaXN0Lm9mLmZpbGVzLmRhcGkucHVwMSR0aW1lcG9pbnQpCmBgYAoKCiNnZXR0aW5nIHRoZSBwdXAxLXJmcCBwdW5jdGEgaW5mbwojI3VzZSB0aGUgcHVwMV9zdXJmYWNlIGluZm8gZnJvbSBJbWFyaXMKYGBge3J9CkZpbGVzVG9SZWFkREFQSVJGUCA8LSBjKCJDMF9BcmVhIiwgCiAgICAgICAgICAgICJDMF9Cb3VuZGluZ0JveE9PX0xlbmd0aF9CIiwKICAgICAgICAgICAgIkMwX0JvdW5kaW5nQm94T09fTGVuZ3RoX0MiLAogICAgICAgICAgICAiQzBfRWxsaXBzb2lkX0F4aXNfTGVuZ3RoX0IiLAogICAgICAgICAgICAiQzBfRWxsaXBzb2lkX0F4aXNfTGVuZ3RoX0MiLAogICAgICAgICAgICAiQzBfSW50ZW5zaXR5X0NlbnRlcl9DaD00IiwKICAgICAgICAgICAgIkMwX0ludGVuc2l0eV9NZWFuX0NoPTQiLCAKICAgICAgICAgICAgIkMwX0ludGVuc2l0eV9NZWRpYW5fQ2g9NCIsCiAgICAgICAgICAgICJDMF9JbnRlbnNpdHlfU3VtX0NoPTQiLAogICAgICAgICAgICAiQzBfSW50ZW5zaXR5X0NlbnRlcl9DaD01IiwKICAgICAgICAgICAgIkMwX0ludGVuc2l0eV9NZWFuX0NoPTUiLCAKICAgICAgICAgICAgIkMwX0ludGVuc2l0eV9NZWRpYW5fQ2g9NSIsCiAgICAgICAgICAgICJDMF9JbnRlbnNpdHlfU3VtX0NoPTUiLAogICAgICAgICAgICAiQzBfTnVtYmVyX29mX1ZveGVscyIsIAogICAgICAgICAgICAiQzBfTnVtYmVyX29mX1RyaWFuZ2xlcyIsCiAgICAgICAgICAgICJDMF9TcGhlcmljaXR5IiwgCiAgICAgICAgICAgICJDMF9Wb2x1bWUuY3N2IiwgCiAgICAgICAgICAgICJDMF9Qb3NpdGlvbl9YLmNzdiIsCiAgICAgICAgICAgICJDMF9Qb3NpdGlvbl9ZLmNzdiIsCiAgICAgICAgICAgICJDMF9JbnRlbnNpdHlfTWF4X0NoPTYiLAogICAgICAgICAgICAiQzBfSW50ZW5zaXR5X0NlbnRlcl9DaD02IikKYGBgCgojZmlyc3QgZ2V0IHRoZSBpbmZvIG9mIHRoZSBjZWxsIHN1cmZhY2UgdGhlbiBtYXRjaCBlYWNoIGNlbGwgc3VyZmFjZSB3aXRoIHRoZSBwdXAxIHB1bmN0YS4gCmRvIG5vdCBpbmNsdWRlIHRoZSBNUkcgY2VsbHMgYXMgdGhleSBoYXZlIG5vIHB1cDEtcmZwIHB1bmN0YSBtYXNrCmBgYHtyfQpkYXBpX3B1cDFfaW1hcmlzX2NlbGxzIDwtIGRpcigifi9JbWFyaXMtZGF0YS8yMDIyL3B1cDFfcmZwLzEwLTctMjIvc3RhYmxlL2ltYXJpcy9zdXJmYWNlL2NlbGxzIiwgZnVsbC5uYW1lcyA9IFRSVUUpIAoKbGlzdC5vZi5maWxlcy5kYXBpLnB1cDEgPC0gZ2V0LmltYXJpcy5pbmZvLmRhcGlfcHVwMS5zdXJmYWNlKGRpci5uYW1lcyA9IGRhcGlfcHVwMV9pbWFyaXNfY2VsbHMsIGZpbGVzX3RvX3JlYWQgPSBGaWxlc1RvUmVhZERBUElSRlApICN1cGRhdGVkIHRoaXMgZnVuY3Rpb24gdG8gbm90IGluY2x1ZGUgdHJhY2tJRHMKCmxpc3Qub2YuZmlsZXMuZGFwaS5wdXAxIDwtIGxpc3Qub2YuZmlsZXMuZGFwaS5wdXAxICU+JQogICAgbXV0YXRlKHRpbWVwb2ludCA9IGlmZWxzZSh0aW1lcG9pbnQgPT0gMiwzMSx0aW1lcG9pbnQpKQpsaXN0Lm9mLmZpbGVzLmRhcGkucHVwMSAlPiUgc3BsaXQoLiR0aW1lcG9pbnQpCmBgYAoKCiNHZXR0aW5nIHRoZSBwdXAxIHB1bmN0YSBzdXJmYWNlIGluZm8gCmBgYHtyfQpwdXAxX3N1cmZhY2VfaW1hcmlzIDwtIGRpcigifi9JbWFyaXMtZGF0YS8yMDIyL3B1cDFfcmZwLzEwLTctMjIvc3RhYmxlL2ltYXJpcy9zdXJmYWNlL3B1cDEiLCBmdWxsLm5hbWVzID0gVFJVRSkgCgpwdXAxX3B1bmN0YSA8LSBnZXQuaW1hcmlzLmluZm8uZGFwaV9wdXAxLnN1cmZhY2UoZGlyLm5hbWVzID0gcHVwMV9zdXJmYWNlX2ltYXJpc1szOjhdLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzX3RvX3JlYWQgPSBGaWxlc1RvUmVhZERBUElSRlApIApwdXAxX3B1bmN0YSA8LSBwdXAxX3B1bmN0YSAlPiUgCiAgbXV0YXRlKHRpbWVwb2ludCA9IGlmZWxzZSh0aW1lcG9pbnQgPT0gMiwzMSx0aW1lcG9pbnQpKQoKcHVwMV9wdW5jdGEgJT4lIHNwbGl0KC4kdGltZXBvaW50KQpgYGAKIAoKCiNjb21iaW5lIHRoZSBjZWxsIHN1cmZhY2UgaW5mbyB3aXRoIHRoZSBwdXAxIHB1bmN0YSBpbmZvLiAKYGBge3J9CiN0aGlzIHNob3VsZCBoYXZlIDExMTU5IG5vLiBvZiBjZWxscyAKcHVwMS5kYXBpLmNlbGwucHVuY3RhIDwtIGxpc3Qub2YuZmlsZXMuZGFwaS5wdXAxICU+JSAjZGYgd2l0aCBlbnRpcmUgY2VsbCBzZWdtZW50ZWQgCiAgc2VsZWN0KAogICAgYXJlYSwKICAgIHBvcy54LAogICAgcG9zLnksCiAgICB0aW1lcG9pbnQsCiAgICBhbGwubWFzay5pbnQubWF4LAogICAgYWxsLm1hc2suaW50LmNlbnRlciwKICAgIHJmcC5pbnQubWVhbiwKICAgIHJmcC5pbnQubWVkaWFuLAogICAgcmZwLmludC5zdW0sCiAgICBkYXBpLmludC5tZWFuLAogICAgZGFwaS5pbnQubWVkaWFuLAogICAgZGFwaS5pbnQuc3VtLAogICAgZXhwZXJpbWVudCwKICAgIGZpZWxkCiAgKSAlPiUgCiAgbGVmdF9qb2luKAogICAgLiwKICAgIHB1cDFfcHVuY3RhICU+JSAgICAgICAgI2RmIHdpdGggdGhlIHB1cDEgcHVuY3RhIHNlZ21lbnRlZCAKICAgICAgc2VsZWN0KAogICAgICAgIHJmcC5pbnQuY2VudGVyLAogICAgICAgIHJmcC5pbnQubWVhbiwKICAgICAgICByZnAuaW50Lm1lZGlhbiwKICAgICAgICByZnAuaW50LnN1bSwKICAgICAgICBkYXBpLmludC5tZWFuLAogICAgICAgIGRhcGkuaW50LnN1bSwKICAgICAgICBkYXBpLmludC5tZWRpYW4sCiAgICAgICAgYWxsLm1hc2suaW50Lm1heCwKICAgICAgICBhbGwubWFzay5pbnQuY2VudGVyLAogICAgICAgIGFyZWEsCiAgICAgICAgdGltZXBvaW50LAogICAgICAgIGV4cGVyaW1lbnQsCiAgICAgICAgZmllbGQsCiAgICAgICAgbm8ub2Yudm94ZWxzCiAgICAgICkgJT4lIHJlbmFtZSgiYXJlYS5wdW5jdGEiID0gImFyZWEiLAogICAgICAgICAgICAgICAgICAgInJmcC5jZW50ZXIucHVuY3RhIiA9ICJyZnAuaW50LmNlbnRlciIsCiAgICAgICAgICAgICAgICAgICAicmZwLm1lYW4ucHVuY3RhIiA9ICJyZnAuaW50Lm1lYW4iLAogICAgICAgICAgICAgICAgICAgInJmcC5zdW0ucHVuY3RhIiA9ICJyZnAuaW50LnN1bSIsCiAgICAgICAgICAgICAgICAgICAicmZwLm1lZGlhbi5wdW5jdGEiID0gInJmcC5pbnQubWVkaWFuIiwKICAgICAgICAgICAgICAgICAgICJkYXBpLm1lYW4ucHVuY3RhIiA9ICJkYXBpLmludC5tZWFuIiwKICAgICAgICAgICAgICAgICAgICJkYXBpLnN1bS5wdW5jdGEiID0gImRhcGkuaW50LnN1bSIsCiAgICAgICAgICAgICAgICAgICAiZGFwaS5tZWRpYW4ucHVuY3RhIiA9ICJkYXBpLmludC5tZWRpYW4iLAogICAgICAgICAgICAgICAgICAgIm5vLm9mLnZveGVscy5wdW5jdGEiID0gIm5vLm9mLnZveGVscyIpLAogICAgIGJ5ID0gYygiYWxsLm1hc2suaW50Lm1heCIgLCAKICAgICAgICAgICAgImV4cGVyaW1lbnQiICwgCiAgICAgICAgICAgICJmaWVsZCIgLCAKICAgICAgICAgICAgInRpbWVwb2ludCIgLCAKICAgICAgICAgICAgImFsbC5tYXNrLmludC5jZW50ZXIiKQogICkKCgogIAojdGhpcyBoYXMgNjUxNCBjZWxscy4gc29tZSBjZWxscyBoYXZlIG11bHRpcGxlIHB1bmN0YS4gbWF5YmUganVzdCBkcm9wIHRoZSBjZWxscy4gCmBgYAoKCiNjb21iaW5lIHRoZSBjZWxsIHN1cmZhY2UgKyBwdXAxIHB1bmN0YSBpbmZvIG9mIHRoZSBwdXAxIGV4cHJlc3NpbmcgY2VsbHMgd2l0aCBhbGwgdGhlIGNlbGwgc3VyZmFjZSBpbmZvcm1hdGlvbi4gVGhlcmUgd2lsbCBiZSBOQXMgaW4gdGhlIGNvbHVtbnMgd2l0aCBwdW5jdGEgaW4gdGhlaXIgbmFtZXMgZm9yIHRoZSBuZWcgY2VsbHMgCmBgYHtyfQojIHB1cDEuZGFwaS5hbGwgPC0gbGlzdC5vZi5maWxlcy5kYXBpLnB1cDEgJT4lIAojICAgbGVmdF9qb2luKC4scHVwMS5kYXBpLmNlbGwucHVuY3RhICU+JSAKIyAgICAgICAgICAgICAgIHNlbGVjdCguLGFyZWEsIAojICAgICAgICAgICAgICAgICAgICAgIHBvcy54LCAKIyAgICAgICAgICAgICAgICAgICAgICBwb3MueSwKIyAgICAgICAgICAgICAgICAgICAgICB0aW1lcG9pbnQsCiMgICAgICAgICAgICAgICAgICAgICAgZXhwZXJpbWVudCwgCiMgICAgICAgICAgICAgICAgICAgICAgZmllbGQsIAojICAgICAgICAgICAgICAgICAgICAgIHJmcC5jZW50ZXIucHVuY3RhLCByZnAubWVhbi5wdW5jdGEsIHJmcC5tZWRpYW4ucHVuY3RhLCByZnAuc3VtLnB1bmN0YSwKIyAgICAgICAgICAgICAgICAgICAgICBkYXBpLm1lYW4ucHVuY3RhLGRhcGkuc3VtLnB1bmN0YSwgZGFwaS5tZWRpYW4ucHVuY3RhLAojICAgICAgICAgICAgICAgICAgICAgIGFyZWEucHVuY3RhLCBuby5vZi52b3hlbHMucHVuY3RhKSwgCiMgICAgICAgICAgICAgYnkgPSBjKCJhcmVhIiwicG9zLngiLCJwb3MueSIsInRpbWVwb2ludCIsICJleHBlcmltZW50IiwgImZpZWxkIikpCiMgCiMgcHVwMS5kYXBpLmFsbAoKI2RvbnQgbmVlZCB0byBkbyB0aGlzLiAKYGBgCgoKQ29tYmluaW5nIHRoZSBHRlAgaW50ZW5zaXRpZXMgd2l0aCB0aGUgcmZwIHB1bmN0YSBpbmZvIGF0IHQgPSAxIApgYGB7cn0KY2VsbF9hdHJpYnV0ZXMgPC0gbGlzdC5vZi5maWxlcy5nZnAkYDIwbWluYCAlPiUgCiAgZmlsdGVyKHRpbWVwb2ludCAlaW4lIGMoMSwzMikpICU+JSAKICBsZWZ0X2pvaW4oLixwdXAxLmRhcGkuY2VsbC5wdW5jdGEgJT4lIHNlbGVjdCgtYWxsLm1hc2suaW50Lm1heCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtYWxsLm1hc2suaW50LmNlbnRlcikgLAogICAgICAgICAgICBieSA9IGMoImFyZWEiLAogICAgICAgICAgICAgICAgICAgInRpbWVwb2ludCIsCiAgICAgICAgICAgICAgICAgICAicG9zLngiLAogICAgICAgICAgICAgICAgICAgInBvcy55IiwKICAgICAgICAgICAgICAgICAgICJleHBlcmltZW50IiwKICAgICAgICAgICAgICAgICAgICJmaWVsZCIpKQoKY2VsbF9hdHJpYnV0ZXMgJT4lIAogICMgZmlsdGVyKHVuaXF1ZS50cmFja0lEID09ICIxMDAwMDAxNzc0XzIwbWluX3MzIikKICAgIGRwbHlyOjpncm91cF9ieShmaWVsZCwgdW5pcXVlLnRyYWNrSUQsIHRpbWVwb2ludCkgJT4lCiAgICBkcGx5cjo6c3VtbWFyaXNlKG4gPSBkcGx5cjo6bigpLCAuZ3JvdXBzID0gImRyb3AiKSAlPiUKICAgIGRwbHlyOjpmaWx0ZXIobiA+IDFMKQojNjQ0MCBjZWxscy4gVGhlcmUgYXJlIDYgY2VsbHMgd2l0aCBtdWx0aXBsZSBwdXAxIHB1bmN0YS4gbWF5YmUgZHJvcCB0aGVzZSBjZWxscyBqdXN0IGZvciBzaW1wbGljaXR5IHB1cnBvc2VzLiAKYGBgCgojQmFja2dyb3VuZCBzdWJ0cmFjdGlvbiAKYGBge3J9CiNiYWNrZ3JvdW5kIGluZm8gZmlsZXMgZm9yIGdmcCBhbmQgbWNoZXJyeSBhbmQgREFQSTogdGhlIGJhY2tncm91bmQgZm9sZGVyIGhhcyB0d28gZGlyZWN0b3JpZXM6IGdmcCBiZyBhbmQgbWNoZXJyeStkYXBpIGJnCmJnIDwtIGRpcihwYXRoID0gIn4vSW1hcmlzLWRhdGEvMjAyMi9wdXAxX3JmcC8xMC03LTIyL3N0YWJsZS9iYWNrZ3JvdW5kIiAsIGZ1bGwubmFtZXMgPSBUUlVFKQoKI0dldCB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSBiYWNrZ3JvdW5kIGludGVuc2l0eSBmb3IgZXZlcnkgaW1hZ2UgZm9yIAojcmZwIGFuZCBEQVBJCnJmcC5kYXBpLmJnLm1lYW5zIDwtIGJnLmludGVuc2l0eS5yZnAuZGFwaShiZy5maWxlcyA9IGxpc3QuZmlsZXMoYmdbMV0gLCBmdWxsLm5hbWVzID0gVFJVRSkpCnJmcC5kYXBpLmJnLm1lYW5zCgojZm9yIEdGUApnZnAuYmcubWVhbiA8LSBiZy5pbnRlbnNpdHkuZ2ZwKGJnLmZpbGVzID0gbGlzdC5maWxlcyhiZ1syXSAsIGZ1bGwubmFtZXMgPSBUUlVFKSkKCmdmcC5iZy5tZWFuJGAyMG1pbmAgJT4lIAogIGFycmFuZ2UoZmllbGQsIHRpbWVwb2ludCkgJT4lIAogIHNwbGl0KC4kZmllbGQpIApgYGAKCgoKI2dmcCBiYWNrZ3JvdW5kIGZvciBzMSBhbmQgczIgc2FtcGxlczoKYGBge3J9CnMxLjJnZnAuYmdfZmlsZXMgPC0gbGlzdC5maWxlcygifi9JbWFyaXMtZGF0YS8yMDIyL3B1cDFfcmZwLzEwLTctMjIvY2xuMi9iYWNrZ3JvdW5kL2JnX2dmcF9zMV9zMiIsIGZ1bGwubmFtZXMgPSBUKQoKZ2ZwLmJnLm1lYW4uczEuMjwtIGxhcHBseShzMS4yZ2ZwLmJnX2ZpbGVzLCBmdW5jdGlvbihhKXsKICByZWFkLmNzdihhKSAlPiUgCiAgbXV0YXRlKGZpZWxkID0gc3RyX3NwbGl0KExhYmVsLCAiXyIsIHNpbXBsaWZ5ID0gVClbLG5jb2woc3RyX3NwbGl0KExhYmVsLCAiXyIsIHNpbXBsaWZ5ID0gVCkpLTJdLAogICAgICAgICB0aW1lcG9pbnQgPSBhcy5udW1lcmljKHN0cl9yZW1vdmUoc3RyX3NwbGl0KExhYmVsLCAiXyIsIHNpbXBsaWZ5ID0gVClbLG5jb2woc3RyX3NwbGl0KExhYmVsLCAiXyIsIHNpbXBsaWZ5ID0gVCkpLTFdLCAidCIpKSkgJT4lIAogIHNlbGVjdChmaWVsZCwKICAgICAgICAgdGltZXBvaW50LAogICAgICAgICBNZWFuLAogICAgICAgICBNaW4pICU+JSAKICBncm91cF9ieSh0aW1lcG9pbnQsIGZpZWxkKSAlPiUgCiAgc3VtbWFyaXNlKGF2Zy5nZnAuYmcgPSBtZWFuKE1lYW4pKQp9KSAlPiUgYmluZF9yb3dzKCkKCmdmcC5iZy5tZWFuJGAyMG1pbmAgPC0gZ2ZwLmJnLm1lYW4kYDIwbWluYCAlPiUgCiAgbGVmdF9qb2luKC4sZ2ZwLmJnLm1lYW4uczEuMiwgYnkgPSBjKCJmaWVsZCIsICJ0aW1lcG9pbnQiKSkgJT4lIAogIG11dGF0ZShhdmcuZ2ZwLmJnID0gaWZlbHNlKGlzLm5hKGF2Zy5nZnAuYmcpLCBNZWFuX2dmcCwgYXZnLmdmcC5iZykpIAoKZ2ZwLmJnLm1lYW4kYDIwbWluYCAlPiUgCiAgZ3JvdXBfYnkoZmllbGQpICU+JSAKICBhcnJhbmdlKGZpZWxkLCB0aW1lcG9pbnQpCmBgYAoKYGBge3J9CnMxLjJyZnAuZGFwaSA8LSBsaXN0LmZpbGVzKCJ+L0ltYXJpcy1kYXRhLzIwMjIvcHVwMV9yZnAvMTAtNy0yMi9jbG4yL2JhY2tncm91bmQvYmdfbWNoZXJyeV9kYXBpX3MxX3MyIiwgZnVsbC5uYW1lcyA9IFQpCgpyZnAuYmcubWVhbi5zMS4yIDwtIGxhcHBseShzMS4ycmZwLmRhcGksIGZ1bmN0aW9uKGEpewogIHJlYWQuY3N2KGEpICU+JQogIG11dGF0ZShmaWVsZCA9IHN0cl9zcGxpdChMYWJlbCwgIl8iLCBzaW1wbGlmeSA9IFQpWyxuY29sKHN0cl9zcGxpdChMYWJlbCwgIl8iLCBzaW1wbGlmeSA9IFQpKS0yXSwKICAgICAgICAgdGltZXBvaW50ID0gYXMubnVtZXJpYyhzdHJfcmVtb3ZlKHN0cl9zcGxpdChMYWJlbCwgIl8iLCBzaW1wbGlmeSA9IFQpWyxuY29sKHN0cl9zcGxpdChMYWJlbCwgIl8iLCBzaW1wbGlmeSA9IFQpKS0xXSwgInQiKSksCiAgICAgICAgICBjaGFubmVsID0gc3RyX3NwbGl0KExhYmVsLCAiXyIsIHNpbXBsaWZ5ID0gVClbLG5jb2woc3RyX3NwbGl0KExhYmVsLCAiXyIsIHNpbXBsaWZ5ID0gVCkpXSkgJT4lCiAgbXV0YXRlKGNoYW5uZWwgPSBpZmVsc2UoY2hhbm5lbCA9PSAiQzQiLCAiRGFwaSIsICJtY2hlcnJ5IikpICU+JQogIHNlbGVjdChmaWVsZCwKICAgICAgICAgdGltZXBvaW50LAogICAgICAgICBjaGFubmVsLAogICAgICAgICBNZWFuLAogICAgICAgICBNaW4pICU+JQogIGdyb3VwX2J5KHRpbWVwb2ludCwgZmllbGQsIGNoYW5uZWwpICU+JQogIHN1bW1hcmlzZShhdmcuZ2ZwLmJnID0gbWVhbihNZWFuKSkgJT4lCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IGNoYW5uZWwsCiAgICAgICAgICAgICAgdmFsdWVzX2Zyb20gPSBhdmcuZ2ZwLmJnKQp9KSAlPiUgYmluZF9yb3dzKCkKCnJmcC5kYXBpLmJnLm1lYW5zJGAyMG1pbmAgPC0gcmZwLmRhcGkuYmcubWVhbnMkYDIwbWluYCAlPiUKICBsZWZ0X2pvaW4oLixyZnAuYmcubWVhbi5zMS4yLCBieSA9IGMoImZpZWxkIiwgInRpbWVwb2ludCIpKSAlPiUKICBtdXRhdGUoRGFwaSA9IGlmZWxzZShpcy5uYShEYXBpKSwgYXZnLmRhcGkuYmcsIERhcGkpLAogICAgICAgICBtY2hlcnJ5ID0gaWZlbHNlKGlzLm5hKG1jaGVycnkpLCBhdmcucmZwLmJnLCBtY2hlcnJ5KSkgJT4lCiAgc2VsZWN0KC1hdmcuZGFwaS5iZywKICAgICAgICAgLWF2Zy5yZnAuYmcpICU+JQogIHJlbmFtZSgiYXZnLmRhcGkuYmciID0gIkRhcGkiLAogICAgICAgICAiYXZnLnJmcC5iZyIgPSAibWNoZXJyeSIpCmBgYAoKI2FjdHVhbGx5IHN1YnRyYWN0IHRoZSBiYWNrZ3JvdW5kIGludGVuc2l0eSBmcm9tIHRoZSBnZnAgYW5kIG1jaGVycnkgaW50ZW5zaXR5IG9mIHRoZSBjZWxscwpgYGB7cn0KI2ZpcnN0IGZ1bi4gc3ViLmJnLmludGVuc2l0eSBzdWJ0cmFjdHMgdGhlIGJnIGludGVuc2l0eSBmcm9tIGVhY2ggY2VsbC4gCgpnZnAuYmcuc3ViIDwtIHN1Yi5iZy5pbnRlbnNpdHkuZ2ZwKGxpc3Qub2YuZmlsZXMgPSBsaXN0Lm9mLmZpbGVzLmdmcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmcubWVhbnMgPSBnZnAuYmcubWVhbiRgMjBtaW5gICU+JSByZW5hbWUoImF2Zy5nZnAuYmciID0gIk1lYW5fZ2ZwIikpCmdmcC5iZy5zdWIKCnJmcC5kYXBpLmJnLnN1YiA8LSBzdWIuYmcuaW50ZW5zaXR5LmRhcGkucmZwKGxpc3Qub2YuZmlsZXMgPSBjZWxsX2F0cmlidXRlcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnLm1lYW5zID0gcmZwLmRhcGkuYmcubWVhbnMkYDIwbWluYCApCgpnZnAuYmcuc3ViJGAyMG1pbmAgJT4lIAogIGZpbHRlcihnZnAubWVhbi5iZy5zdWIgPiAwLAogICAgICAgICApICU+JSAKICBncm91cF9ieShmaWVsZCwgdGltZXBvaW50KSAlPiUgCiAgdGFsbHkoKSAKCnJmcC5kYXBpLmJnLnN1YiRgMjBtaW5gICU+JSBzcGxpdCguJGZpZWxkKQoKYGBgCgojY29tYmluZSB0aGUgYmFja2dyb3VuZCBzdWJ0cmFjdGVkIGdmcCBkYXRhZnJhbWUgd2l0aCB0aGUgYmcgc3VidHJhY3RlZCByZnAvZGFwaSB0b3RhbCBhbmQgcHVuY3RhIGRmcwpgYGB7cn0KZ2ZwLnJmcC5kYXBpLmJnLnN1YiA8LSBnZnAuYmcuc3ViJGAyMG1pbmAgJT4lIAogIGZpbHRlcih0aW1lcG9pbnQgJWluJSBjKDEsMzIpKSAlPiUgCiAgc2VsZWN0KHVuaXF1ZS50cmFja0lELAogICAgICAgICBnZnAubWVhbi5iZy5zdWIsCiAgICAgICAgIGdmcC5zdW0uYmcuc3ViLAogICAgICAgICBhdmcuZ2ZwLmJnLAogICAgICAgICBhcmVhLAogICAgICAgICBwb3MueCwKICAgICAgICAgcG9zLnkpICU+JSAKICBsZWZ0X2pvaW4oLixyZnAuZGFwaS5iZy5zdWIkYDIwbWluYCwgYnkgPSBjKCJ1bmlxdWUudHJhY2tJRCIsICJhcmVhIiwicG9zLngiLCJwb3MueSIpKSAlPiUgc3BsaXQoLiRleHBlcmltZW50KQoKCmBgYAoKCiNmaWx0ZXJpbmcgY2VsbHMgd2hpY2ggaGF2ZSBuZWdhdGl2ZSBiYWNrZ3JvdW5kIHN1YnRyYWN0ZWQgaW50ZW5zaXRpZXMgCmBgYHtyfQojVW5pcWUgdHJhY2tJRHMgb2YgY2VsbHMgYWJvdmUgdGhlIGJhY2tncm91bmQgaW50IGZvciBnZnAsIGRhcGkgYW5kIHJmcCAKI3RoaXMgZnVuY3Rpb24gcmVzdWx0cyBpbiBhIGxpc3Qgb2YgdHdvIGRmcy4gdGhlIDFzdCBkZiA9IHVuaXF1ZXRyYWNrSURzIHdpdGggdGhlIGV4cGVyaW1lbnQgdGhleSdyZSBmcm9tLgpsaXN0T2ZVbmlxdHJhY2tJRF9nZnBmaWx0ZXJlZGRmIDwtIHRyYWNrSUQuYWJ2Lnplcm8uZ2ZwLnJmcC5kYXBpKAogIGJnX3N1YnRyYWN0ZWRfZGZ0cDEgPSBnZnAucmZwLmRhcGkuYmcuc3ViLAogIGxpc3RfZ2ZwX2FsbF90cHMgPSBnZnAuYmcuc3ViKQpgYGAKCmBgYHtyfQojdGhlIGRmIHdpdGggZ2ZwIGludGVuc2l0aWVzIGZvciBhbGwgdGltZXBvaW50cyB3aGljaCBpcyBmaWx0ZXJlZCBmb3IgY2VsbHMgZ2ZwLm1lYW4uYmcuc3ViID4gMCAKbGlzdC5vZi5maWxlcy5iZy5zdWIuYWJvdmUuMC5nZnAgPC0gbGlzdE9mVW5pcXRyYWNrSURfZ2ZwZmlsdGVyZWRkZltbMl1dICU+JSAKICBzcGxpdCguJGV4cGVyaW1lbnQpCmBgYAoKCgojcmVtb3ZpbmcgY2VsbHMgd2l0aCBuZWdhdGl2ZSBiYWNrZ3JvdW5kIHN1YnRyYWN0ZWQgaW50ZW5zaXRpZXMgZnJvbSB0aGUgZGF0YWZyYW1lIHdpdGggdGhlIGNlbGwgaW5mbyBmcm9tIHRpbWVwb2ludCAxIGFuZCB0aGUgbGFzdCB0aW1lcG9pbnQKYGBge3J9CmdmcF9yZnBfZGFwaV9iZ3N1YkFidlplcm9fdHAxIDwtIGxpc3RPZlVuaXF0cmFja0lEX2dmcGZpbHRlcmVkZGZbWzFdXSAlPiUgCiAgbGVmdF9qb2luKC4sYmluZF9yb3dzKGdmcC5yZnAuZGFwaS5iZy5zdWIpICwgYnkgPSBjKCJ1bmlxdWUudHJhY2tJRCIsICJleHBlcmltZW50IikpCgpnZnBfcmZwX2RhcGlfYmdzdWJBYnZaZXJvX3RwMSAlPiUgCiAgZ3JvdXBfYnkodGltZXBvaW50LCBleHAuZmllbGQpICU+JSAKICB0YWxseSgpCgpsaXN0Lm9mLmZpbGVzLmJnLnN1Yi5hYm92ZS4wLmdmcCRgMjBtaW5gJT4lIAogIGdyb3VwX2J5KHRpbWVwb2ludCwgZXhwLmZpZWxkKSAlPiUgdGFsbHkoKQpgYGAKCgojZGVuc2l0eSBwbG90IG9mIHRoZSBEQVBJIHN0YWluaW5nLiBIaWdoZXIgREFQSSBzdGFpbmluZyA9PSBkZWFkIGNlbGxzIApgYGB7ciBmaWcuaGVpZ2h0PSA4ICwgZmlnLndpZHRoPSAxM30KI2F0IHRoZSBmaXJzdCB0aW1lcG9pbnQKZ2ZwX3JmcF9kYXBpX2Jnc3ViQWJ2WmVyb190cDEgICU+JSAKICBnZ3Bsb3QoLixhZXMoeCA9IGRhcGkubWVhbi5iZy5zdWIsIGNvbG9yID0gYXMuZmFjdG9yKHRpbWVwb2ludCkpKSsKICBnZW9tX2RlbnNpdHkoYWVzKHk9Li5zY2FsZWQuLikpKwogIGZhY2V0X3dyYXAofmZpZWxkLCBzY2FsZXMgPSAiZnJlZV94IikrCiAgc2NhbGVfeF9sb2cxMCgpKwogIHRoZW1lX3B1YnIoeC50ZXh0LmFuZ2xlID0gNDUpCgoKI2NvcnJlbGF0aW9uIG9mIHRoZSBkYXBpIHN0YWluaW5nIGF0IHRpbWVwaW50IDEgYW5kIHRoZSBsYXN0IHRpbWVwb2ludAojIGdmcF9yZnBfZGFwaV9iZ3N1YkFidlplcm9fdHAxICAlPiUKIyAgIHNlbGVjdChkYXBpLm1lYW4uYmcuc3ViLCB0aW1lcG9pbnQsIGZpZWxkLCB1bmlxdWUudHJhY2tJRCkgJT4lCiMgICBmaWx0ZXIoISh1bmlxdWUudHJhY2tJRCA9PSAiMTAwMDAwMDI1OV8yMG1pbl9zOCIpKSAlPiUgCiMgICBwaXZvdF93aWRlcih2YWx1ZXNfZnJvbSA9IGRhcGkubWVhbi5iZy5zdWIsIG5hbWVzX2Zyb20gPSB0aW1lcG9pbnQpICU+JSAKIyAgIGdncGxvdCguLGFlcyh4ID0gYDFgLCB5ID0gYDMxYCkpKwojICAgZ2VvbV9wb2ludCgpKwojICAgZmFjZXRfd3JhcCh+ZmllbGQsIHNjYWxlcyA9ICJmcmVlX3giKSsKIyAgIHRoZW1lX3B1YnIoeC50ZXh0LmFuZ2xlID0gNDUpCgojdGhlIGFib3ZlIGNvZGUgZGlkIG5vdCB3b3JrIGJlY2F1c2UgdGhlcmUgYXJlIGR1cGxpY2F0ZSB2YWx1ZXMgZm9yIGEgZ2l2ZW4gY2VsbCBJRC4gCgojdG8gZmluZCB0aGUgZHVwbGljYXRlcwpnZnBfcmZwX2RhcGlfYmdzdWJBYnZaZXJvX3RwMSAgJT4lIAogIHNlbGVjdChkYXBpLm1lYW4uYmcuc3ViLCB0aW1lcG9pbnQsIGZpZWxkLCB1bmlxdWUudHJhY2tJRCkgJT4lCiAgICBkcGx5cjo6Z3JvdXBfYnkoZmllbGQsIHVuaXF1ZS50cmFja0lELCB0aW1lcG9pbnQpICU+JQogICAgZHBseXI6OnN1bW1hcmlzZShuID0gZHBseXI6Om4oKSwgLmdyb3VwcyA9ICJkcm9wIikgJT4lCiAgICBkcGx5cjo6ZmlsdGVyKG4gPiAxTCkKCiNyZW1vdmUgdGhlIGR1cGxpY2F0ZXMgYW5kIGxvb2sgYXQgaG93IGRhcGkgc3RhaW5pbmcgaXMgY2hhbmdpbmcgZnJvbSB0aW1lcG9pbnQgMSB0byB0cCAzMToKI2NvcnJlbGF0aW9uIG9mIHRoZSBkYXBpIHN0YWluaW5nIGF0IHRpbWVwaW50IDEgYW5kIHRoZSBsYXN0IHRpbWVwb2ludAojIGdmcF9yZnBfZGFwaV9iZ3N1YkFidlplcm9fdHAxICAlPiUKIyAgIHNlbGVjdChkYXBpLm1lYW4uYmcuc3ViLCB0aW1lcG9pbnQsIGZpZWxkLCB1bmlxdWUudHJhY2tJRCkgJT4lCiMgICBmaWx0ZXIoISh1bmlxdWUudHJhY2tJRCA9PSAiMTAwMDAwMjA3MV8yMG1pbl9zOCIpKSAlPiUgCiMgICBwaXZvdF93aWRlcih2YWx1ZXNfZnJvbSA9IGRhcGkubWVhbi5iZy5zdWIsIG5hbWVzX2Zyb20gPSB0aW1lcG9pbnQpICU+JSAKIyAgIGdncGxvdCguLGFlcyh4ID0gYDFgLCB5ID0gYDMxYCkpKwojICAgZ2VvbV9wb2ludCgpKwojICAgZmFjZXRfd3JhcCh+ZmllbGQsIHNjYWxlcyA9ICJmcmVlX3giKSsKIyAgIHRoZW1lX3B1YnIoeC50ZXh0LmFuZ2xlID0gNDUpCmBgYAoKCiNnZXQgdGhlIHRocmVzaG9sZCBvZiBkYXBpIGFib3ZlIHdoaWNoIHRoZSBjZWxscyB3aWxsIGJlIGRlZW1lZCBkZWFkISEKYGBge3IgZmlnLmhlaWdodD0gOCAsIGZpZy53aWR0aD0gMTN9CiNzcGxpdCB0aGUgZGYgaW50byB0aGUgZXhwZXJpbWVudHMgc28gdGhhdCB0aGVyZSBpcyBhIGRlYWQgY2VsbCB0aHJlc2hvbGQgZm9yIGV2ZXJ5IGV4cGVyaW1lbnQgCmRlYWRjZWxsX3RlbXBfZGYgPC0gZ2ZwX3JmcF9kYXBpX2Jnc3ViQWJ2WmVyb190cDEgJT4lIAogIHNwbGl0KC4kZXhwZXJpbWVudCkgCgoKZGVhZENlbGxfYm91bmRyeSA8LSBkYXBpLnRocmVzaG9sZChkZl9mb3JfdGhyZXNob2xkID0gZGVhZGNlbGxfdGVtcF9kZiAsIGxvd2VyX2xpbSA9IDEwMCwgdXBwcl9saW0gPSAzMDAgKSAlPiUgCiAgcmVuYW1lKCJleHAuZmllbGQiID0gImV4cGVyaW1lbnQiKQoKCiNhdCB0aGUgZmlyc3QgdGltZXBvaW50CmdmcF9yZnBfZGFwaV9iZ3N1YkFidlplcm9fdHAxICU+JSAKICBmaWx0ZXIodGltZXBvaW50ID09IDEpICU+JSAKICBsZWZ0X2pvaW4oLixkZWFkQ2VsbF9ib3VuZHJ5ICwgYnkgPSAiZXhwLmZpZWxkIikgJT4lIAogIGdncGxvdCguLGFlcyh4ID0gZGFwaS5tZWFuLmJnLnN1YiwgY29sb3IgPSBzYW1wbGUpKSsKICBnZW9tX2RlbnNpdHkoYWVzKHk9Li5zY2FsZWQuLikpKwogIGdlb21fdmxpbmUoZGF0YT0gZGVhZENlbGxfYm91bmRyeSwgYWVzKHhpbnRlcmNlcHQgPSBkYXBpLnRocmVzaG9sZCkpKwogIGZhY2V0X3dyYXAofmV4cC5maWVsZCwgc2NhbGVzID0gImZyZWVfeCIpKwogIHNjYWxlX3hfbG9nMTAoKSsKICBhbm5vdGF0aW9uX2xvZ3RpY2tzKCkrCiAgdGhlbWVfcHVicih4LnRleHQuYW5nbGUgPSA0NSkKCmBgYAoKCiNyZW1vdmluZyBjZWxscyB3aXRoIGRhcGkgaW50ZW5zaXR5IGdyZWF0ZXIgdGhhbiB0aGUgZGFwaSB0aHJlc2hvbGQgc2V0CmBgYHtyfQojZ2V0dGluZyB0aGUgSURzIG9mIHRoZSBjZWxscyByZW1haW5pbmcgYWZ0ZXIgcmVtb3ZpbmcgdGhlIGNlbGxzIHdpdGggaGlnaGVyIHRoYW4gdGhyZXNob2xkIGRhcGkgaW50ZW5zaXR5LiB1c2UgdGhpcyB0byBmaWx0ZXIgY2VsbHMgZnJvbSB0aGUgZGYgd2l0aCBtY2hlcnJ5IGFuZCBnZnAgdGltZWxhcHNlIGluZm9ybWF0aW9uCiN3aWxsIHJlbW92ZSBkZWFkIGNlbGxzIGZyb20gdGhlIGZpcnN0IHRpbWVwb2ludCAKZGFwaS5maWx0ZXJlZC5jZWxsc1RyYWNrSUQgPC0gYmluZF9yb3dzKGRlYWRjZWxsX3RlbXBfZGYpICU+JSAKICBmaWx0ZXIodGltZXBvaW50ICVpbiUgYygxLDMyKSkgJT4lIAogIGxlZnRfam9pbiguLGRlYWRDZWxsX2JvdW5kcnksIGJ5ID0gImV4cC5maWVsZCIpICU+JSAKICBmaWx0ZXIoZGFwaS5tZWFuLmJnLnN1YiA8IGRhcGkudGhyZXNob2xkKSAlPiUgcHVsbCh1bmlxdWUudHJhY2tJRCkKCiNkZiB3aXRoIGZsdW9yZXNjZW50IGludGVuc2l0aWVzIG9mIGdmcCwgcmZwIGFuZCBkYXBpIGZvciBsaXZlIGNlbGxzIGF0IHRwID0xIGFudCB0cCA9IDMxLgpsaXZlQ2VsbHNSRlAuREFQSS5HRlAgPC0gZ2ZwX3JmcF9kYXBpX2Jnc3ViQWJ2WmVyb190cDEgJT4lIAogIGxlZnRfam9pbiguLGRlYWRDZWxsX2JvdW5kcnksIGJ5ID0gImV4cC5maWVsZCIpICU+JSAKICBmaWx0ZXIoZGFwaS5tZWFuLmJnLnN1YiA8IGRhcGkudGhyZXNob2xkKQoKCiNkZiB3aXRoIGRlYWQgY2VsbHMgcmVtb3ZlZCB0aGlzIGRmIGhhcyBnZnAgaW50ZW5zaXRpZXMgZm9yIGFsbCB0aGUgdGltZXBvaW50IHdoaWNoIGFyZSBmaWx0ZXJlZCBmb3IgZGVhZCBjZWxscyAKbmV3LmdmcExpdmVDZWxscyA8LSAgYmluZF9yb3dzKGxpc3Qub2YuZmlsZXMuYmcuc3ViLmFib3ZlLjAuZ2ZwKSAlPiUgCiAgZmlsdGVyKHVuaXF1ZS50cmFja0lEICVpbiUgbGl2ZUNlbGxzUkZQLkRBUEkuR0ZQJHVuaXF1ZS50cmFja0lEKQpgYGAKCgojc2F2aW5nIHRoZSBkYXRhZnJhbWUgd2l0aCB0aGUgYmFja2dyb3VuZCBzdWJ0cmFjdGVkLCBkZWFkIGNlbGxzIGZpbHRlcmVkIGludGVuc2l0aWVzIG9mIGdmcHMgZnJvbSB0aGUgYXV0b2ZsdW9yIGNlbGxzIChNUkcpIGFuZCB0aGUgZ2ZwIHBvc2l0aXZlIGNlbGxzLiAKYGBge3J9Cm5ldy5nZnBMaXZlQ2VsbHMgJT4lIAogIHdyaXRlX2NzdiguLHBhdGggPSAifi9wbG90cy9wdXAxLXJmcC1nZnAtZGVjYXkvMTAtNy0yMi1zdGFibGUtZ2ZwL2RhdGEvcmF3X2dmcF9pbnRfYWxsLmNzdiIpCmBgYAoKCmxvb2tpbmcgYXQgdGhlIGRpc3RyaWJ1dGlvbiBvZiByZnAgYW5kIGdmcCBpbiB0aGUgbGl2ZSBjZWxscyAKYGBge3J9CiNhdXRvZmx1cmVzZW5jZSBvZiBwdXAxLXJmcApsaXZlQ2VsbHNSRlAuREFQSS5HRlAgJT4lIAogIGZpbHRlcih0aW1lcG9pbnQgPT0gMSkgJT4lIAogIGdncGxvdCguLGFlcyh4ID1yZnAubWVhbi5iZy5zdWIgLCBjb2xvciA9IHNhbXBsZSkgKSsKICBnZW9tX2RlbnNpdHkoYWVzKHkgPSAuLnNjYWxlZC4uKSkrCiAgc2NhbGVfeF9sb2cxMCgpKyAKICBmYWNldF93cmFwKH5leHBlcmltZW50KSsKICBhbm5vdGF0aW9uX2xvZ3RpY2tzKCkKCmxpdmVDZWxsc1JGUC5EQVBJLkdGUCAlPiUgCiAgZmlsdGVyKHRpbWVwb2ludCA9PSAxKSAlPiUgCiAgZmlsdGVyKHNhbXBsZSA9PSAicG9zLnNpZ25hbCIpICU+JSAKICBnZ3Bsb3QoLixhZXMoeCA9cmZwLm1lYW4uYmcuc3ViLnB1bmN0YSAsIHkgPSBnZnAubWVhbi5iZy5zdWIpICkrCiAgZ2VvbV9wb2ludCgpKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpKwogIHNjYWxlX3hfbG9nMTAoKSsgCiAgc2NhbGVfeV9sb2cxMCgpCgoKI2F1dG9mbHVvcmVzY2VuY2UgdnMgZ2ZwIHNpZ25hbCAKbGl2ZUNlbGxzUkZQLkRBUEkuR0ZQICU+JSAKICBmaWx0ZXIodGltZXBvaW50ID09IDEpICU+JSAKICBnZ3Bsb3QoLixhZXMoeCA9IGdmcC5tZWFuLmJnLnN1YikpKwogIGdlb21faGlzdG9ncmFtKCkrCiAgc2NhbGVfeF9sb2cxMCgpKwogIGZhY2V0X3dyYXAofmZpZWxkLCBzY2FsZXMgPSAiZnJlZSIpCmBgYAoKI3Bsb3R0aW5nIGxpbmUgcGxvdHMgcmF3IHdpdGhvdXQgYW55IEFGIGZpbHRlcmluZyAKYGBge3J9CmJpbmRfcm93cyhuZXcuZ2ZwTGl2ZUNlbGxzKSU+JQogICMgZmlsdGVyKGZpZWxkICVpbiUgYygiczciLCJzOCIpKSAlPiUgCiAgZ2dwbG90KC4sYWVzKHRpbWVwb2ludCwgZ2ZwLm1lYW4uYmcuc3ViLCBncm91cCA9IHVuaXF1ZS50cmFja0lEICxjb2xvciA9IHNhbXBsZSkpKwogIGdlb21fbGluZShhbHBoYSA9IDAuMikrCiAgZmFjZXRfd3JhcCh+ZmllbGQsIHNjYWxlcyA9ICJmcmVlX3kiKQojIGdnc2F2ZShmaWxlbmFtZT0ibG4tbXJnX3ZzX2dmcC5wbmciLCBwbG90PSBsYXN0X3Bsb3QoKSAsIHBhdGggPSAifi9wbG90cy83LTItMjAvcGxvdHNfdGhlc2lzX2NvbV9tZWV0LTIwMjAvIiAsIHdpZHRoID0gMTMgLCBoZWlnaHQgPSA4LCBiZyA9ICJ0cmFuc3BhcmVudCIpCgpuZXcuZ2ZwTGl2ZUNlbGxzICU+JSAKICBnZ3Bsb3QoLixhZXMocmVhbC50aW1lLmdmcCwgZ2ZwLm1lYW4uYmcuc3ViLCBncm91cCA9IHVuaXF1ZS50cmFja0lEICxjb2xvciA9IHNhbXBsZSkpKwogIGdlb21fbGluZShhbHBoYSA9IDAuMikrCiAgZmFjZXRfd3JhcCh+ZmllbGQsIHNjYWxlcyA9ICJmcmVlX3kiKQogICMgYW5ub3RhdGlvbl9sb2d0aWNrcygpCmBgYApGaXggYmFja2dyb3VuZCBmb3IgczEgYW5kIHMyOiBmaXhlZCBiYWNrZ3JvdW5kIGludGVuc2l0aWVzIG9mIHMxLCBzMywgNCB0aWxsIHM4LiAKCiNGaWx0ZXJpbmcgY2VsbHMgYmFzZWQgb24gYXV0b2ZsdW9yZXNjZW5jZSAKCiMjZ2V0dGluZyB0aGUgYXV0b2ZsdW9yZXNjZW5jZSB0aHJlc2hvbGQgZm9yIGdmcCBhbmQgbWNoZXJyeSAKYGBge3J9CmJpbmRfcm93cyhuZXcuZ2ZwTGl2ZUNlbGxzKSAlPiUgCiAgZmlsdGVyKGV4cGVyaW1lbnQgPT0gIjIwbWluIikgJT4lIAogIGdncGxvdCguLGFlcyh4ID0gZ2ZwLm1lYW4uYmcuc3ViLCBjb2xvciA9IHNhbXBsZSkpKwogIGdlb21fZGVuc2l0eShhZXMoeSA9IC4uc2NhbGVkLi4pKSsKICBmYWNldF93cmFwKH50aW1lcG9pbnQgLCBzY2FsZXMgPSAiZnJlZV94IikrCiAgc2NhbGVfeF9sb2cxMCgpCgpsaXZlQ2VsbHNSRlAuREFQSS5HRlAgJT4lIAogIGZpbHRlcih0aW1lcG9pbnQgPT0gMzIpICU+JSAKICAjIGZpbHRlcihleHBlcmltZW50ID09ICIyMG1pbiIpICU+JSAKICBnZ3Bsb3QoLixhZXMoeCA9IGdmcC5tZWFuLmJnLnN1YiwgY29sb3IgPSBzYW1wbGUpKSsKICBnZW9tX2RlbnNpdHkoYWVzKHkgPSAuLnNjYWxlZC4uKSkrCiAgZmFjZXRfd3JhcCh+ZXhwZXJpbWVudCAsIHNjYWxlcyA9ICJmcmVlX3giKSsKICBzY2FsZV94X2xvZzEwKCkKCmxpdmVDZWxsc1JGUC5EQVBJLkdGUCAlPiUgCiAgZmlsdGVyKHRpbWVwb2ludCA9PSAzMikgJT4lIAogICMgZmlsdGVyKGV4cGVyaW1lbnQgPT0gIjIwbWluIikgJT4lIAogIGdncGxvdCguLGFlcyh4ID0gZ2ZwLm1lYW4uYmcuc3ViLCB5ID0gZGFwaS5tZWFuLmJnLnN1YiAsIGNvbG9yID0gZmllbGQpKSsKICBnZW9tX3BvaW50KCkrCiAgZmFjZXRfd3JhcCh+ZXhwZXJpbWVudCAsIHNjYWxlcyA9ICJmcmVlX3giKQoKYGBgCgoKCmBgYHtyfQojR2V0dGluZyB0aGUgZ2ZwIHRocmVzaG9sZCBmb3IgZmlsdGVyaW5nIGNlbGxzIGJlbG93IHRoaXMgdGhyZXNob2xkIHNldCB1cCBiYXNlZCBvbiBhbGwgdGhlIDMxIHRpbWUgcG9pbnRzIGZvciB0aGUgbXJnIGNlbGxzIApnZnAubWluLmludCA8LSBnZnAudGhlcnNob2xkLjMxdHAoCiAgbGlzdC5vZi5maWxlcy5iZy5zdWIuYWJvdmUuMCA9IG5ldy5nZnBMaXZlQ2VsbHMgJT4lIAogICAgc3BsaXQoLiRleHBlcmltZW50KSkKCgojR2V0dGluZyB0aGUgbWNoZXJyeSB0aHJlc2hvbGQgZm9yIGZpbHRlcmluZyBjZWxscyBiZWxvdyB0aGlzIHRocmVzaG9sZCBzZXQgdXAgYmFzZWQgb24gYWxsIHRoZSAzMSB0aW1lIHBvaW50cyBmb3IgdGhlIG1yZyBjZWxscyAKcmZwLm1pbi5pbnQgPC0gcmZwLnRoZXJzaG9sZC4zMXRwLnRlbXAobGlzdC5vZi5maWxlcy5iZy5zdWIuYWJvdmUuMCA9IGxpdmVDZWxsc1JGUC5EQVBJLkdGUCApCgpyZnAubWluLmludCA8LSByZnAubWluLmludCAlPiUgbXV0YXRlKHB1cDFfdGhyZXNob2xkID0gMjApCgoKYGBgCgojZmlsdGVyaW5nIGJhc2VkIG9uIHB1cDEtcmZwIGV4cHJlc3Npb24gCiMjZmlsdGVyaW5nIGNlbGxzIHdoaWNoIGFyZSBhYm92ZSB0aGUgZ2ZwIGFuZCByZnAgdGhyZXNob2xkIApJbiB0aGUgZmlsdGVyLmNlbGxzLmJlbG93LmF1dG9mbHVvci4zMXRwLmdmcFYyKCkgZnVuY3Rpb24sIHRoZSBmdW5jdGlvbiBsb29rcyBmb3IgdGhlIGNvbHVtbiBuYW1lZCAidGhyZXNob2xkIiBhbmQgSSBuZWVkIHRvIGRlY2lkZSB3aGljaCBjb2x1bW4gd2lsbCBiZSB0aHJlc2hvbGQgYmFzZWQgb24gdGhlIG92ZXJsYXAgb2YgdGhlIG5lZyBhbmQgcG9zaXRpdmUgY2VsbHMuIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBhcmUgY2VsbHMgd2hpY2ggYmVjb21lIGRlYWQvYmVjb21lIGluIGZvY3VzIGFzIHlvdSBrZWVwIHRha2luZyBpbWFnZXMgd2hpY2ggbWlnaHQgc3VkZGVubHkgaW5jcmVhc2UgdGhlIDk1dGggcXVhbnRpbGUgaW50ZW5zaXR5IG9mIHRoZSBuZWdhdGl2ZSBjZWxscy4gCmBgYHtyfQojZ2V0IGEgZmlsdGVyZWQgZGYgb2YgY2VsbHMgcGFzc2luZyB0aGUgZ2ZwIHRocmVzaG9sZCBzZXQgYWJvdmUgCiN0aGlzIGZ1bmN0aW9uIGJlbG93IGZpcnN0IHJlbW92ZXMgY2VsbHMgd2l0aCBwdXAxLXJmcCBsZXNzIHRoYW4gdGhlIHRocmVzaG9sZCBzZXQuIAojVGhlbiBpdCByZW1vdmVzIHRoZSBjZWxscyB3aXRoIGxlc3MgdGhhbiBBRiB0aHJlc2hvbGQgc2V0IGF0IHRwID0xIAojQWZ0ZXIgdGhhdCBpdCBzdWJ0cmFjdHMgdGhlIGFmIHZhbHVlIGZyb20gZXZlcnkgY2VsbCBmb3IgZXZlcnkgdGltZXBvaW50LCBhbmQgaWYgdGhlIHN1YnRyYWN0ZWQgdmFsdWUgaXMgbGVzcyB0aGFuIDEgaXQgbWFrZXMgaXQgTkEuIAoKY2VsbHMuZmlsdGVyZWQuZGYuMzF0cCA8LSBmaWx0ZXIuY2VsbHMuYmVsb3cuYXV0b2ZsdW9yLjMxdHAuZ2ZwVjIoCiAgZGZfcmZwX2RhcGlfZ2ZwID0gbGl2ZUNlbGxzUkZQLkRBUEkuR0ZQLAogIAogIHJmcF9taW5faW50ID0gcmZwLm1pbi5pbnQgJT4lIHJlbmFtZSgicXVhbnRfOTUiID0gInRocmVzaG9sZF85NSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhyZXNob2xkXzk1IiA9ICJwdXAxX3RocmVzaG9sZCIpLAogIAogIGdmcF9saXZlX2NlbGxzX2xpc3QgPSBuZXcuZ2ZwTGl2ZUNlbGxzICU+JSBzcGxpdCguJGV4cGVyaW1lbnQpLAogIAogIGdmcF9taW5faW50ID0gZ2ZwLm1pbi5pbnQgJT4lIAogICAgbXV0YXRlKHRocmVzaG9sZCA9IHRocmVzaG9sZF85NSApCikKCmZpbHRlcmVkLmRmLm5ldy53by5hZi4zMXRwIDwtIGNlbGxzLmZpbHRlcmVkLmRmLjMxdHAkZmlsdGVyZWQuZGYubmV3ICU+JSAKICBiaW5kX3Jvd3MoKSAlPiUgCiAgZmlsdGVyKHNhbXBsZSA9PSAicG9zLnNpZ25hbCIpICU+JSAKICBzcGxpdCguJGV4cGVyaW1lbnQpCgp1bmlxdWUoZmlsdGVyZWQuZGYubmV3LndvLmFmLjMxdHAkYDIwbWluYCR0aW1lcG9pbnQpCgogIApgYGAKCnJlbW92ZSB0aGUgZmlyc3QgdHdvIGJsdXJyeSBpbWFnZXMgZnJvbSBzNwpgYGB7cn0KIyBmaWx0ZXJlZC5kZi5uZXcud28uYWYuMzF0cCRgMjBtaW5gIDwtIGZpbHRlcmVkLmRmLm5ldy53by5hZi4zMXRwJGAyMG1pbmAgJT4lIGZpbHRlcihmaWVsZCA9PSAiczciKQojICAgZmlsdGVyKCEoZmllbGQgPT0gInM3IiAmIHRpbWVwb2ludCAlaW4lIGMoMSwyKSkpIAoKYGBgCgoKI21ha2luZyBkZiBmb3IgYnVsayByZWdyZXNzaW9uCmBgYHtyfQojIyNUaGlzIGZ1bmN0aW9uIGNyZWF0cyB0aGUgZGYgZm9yIGZpdHRpbmcgdGhlIDI0IG1vZGVscyAKIyBsaXN0LmRmLm1vZGVsIDwtIGRmLm1vZGVsKGZpbHRlcmVkLmRmLm5ldyA9IGZpbHRlcmVkLmRmLm5ldy53by5hZikKZGYubW9kZWwuMzF0cC5nZnAgPC0gZGYubW9kZWwuZ2ZwKGZpbHRlcmVkLmRmLm5ldyA9IGZpbHRlcmVkLmRmLm5ldy53by5hZi4zMXRwKQpkZi5tb2RlbC4zMXRwLmdmcAoKIyMjI1RoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIHRoZSBkZiB3aGVyZSB5b3Ugc3VidHJhY3QgdGhlIHQ9MCBpbnRlbnNpdHkgd2l0aCBhbGwgdGhlIG90aGVyIGludGVuc2l0aWVzIGZvciBnZnAKZmluYWwuZGF0YS4zMXRwLmdmcCA8LSBjbGVhbi5kZi5tb2RlbGluZy5nZnAoZGF0YS5nZnAgPSBkZi5tb2RlbC4zMXRwLmdmcCkKCmBgYAoKCk9uIDEvMjgvMjEgdGFsa2VkIHRvIHByZW1hbCBhYm91dCBmaWx0ZXJpbmc6IAoxLiBSZW1vdmUgY2VsbHMgd2hpY2ggaGF2ZSBwb3NpdGl2ZSBkZWx0YSBJbnRlbnNpdHkgbW9yZSB0aGFuIDIgdGltZXMgCmBgYHtyfQojZ2V0dGluZyBJRHMgb2YgY2VsbHMgd2hpY2ggaGF2ZSBwb3NpdGl2ZSBpbnRlbnNpdHkgdmFsdWVzIGZvciBsZXNzIHRoYW4gMiB0aW1lcG9pbnRzIAppZHMuaW50LjIgPC0gZmluYWwuZGF0YS4zMXRwLmdmcCAlPiUgCiAgZ3JvdXBfYnkodW5pcXVlLnRyYWNrSUQpICU+JSAKICB0YWxseShsbi5nZnAuZGlmID4gMCkgJT4lIAogIGZpbHRlcihuPDIpICU+JSAgICAgICAgICAgICNrZWVwIGNlbGxzIHdoaWNoIGhhdmUgbGVzcyB0aGFuIHR3byBwb3NpdGl2ZSBpbnRlbnNpdHkgdmFsdWVzCiAgcHVsbCh1bmlxdWUudHJhY2tJRCkKCiNmaWx0ZXJpbmcgY2VsbHMgd2hpY2ggaGF2ZSB0cmFja0lEIGluIHRoZSBhYm92ZSB2ZWN0b3IgIAojZ2ZwCnRlbXAucG9zSW50Qmx3Mi5nZnAgPC0gZmluYWwuZGF0YS4zMXRwLmdmcCAlPiUgCiAgZmlsdGVyKHVuaXF1ZS50cmFja0lEICVpbiUgaWRzLmludC4yKSAKCmRmX2Zvcl9NZWNoYW5pc3RpY01vZGVsIDwtIHRlbXAucG9zSW50Qmx3Mi5nZnAgICU+JQogIGxlZnRfam9pbigKICAgIC4sCiAgICBiaW5kX3Jvd3MoZmlsdGVyZWQuZGYubmV3LndvLmFmLjMxdHApICwKICAgIGJ5ID0gYygKICAgICAgInVuaXF1ZS50cmFja0lEIiwKICAgICAgInRpbWVwb2ludCIgLAogICAgICAiZXhwZXJpbWVudCIgLAogICAgICAiZ2ZwLm1lYW4uYmcuYWYuc3ViLm5ldyIgLAogICAgICAiZXhwLmZpZWxkIgogICAgKQogICkKCiNzYXZlIHRoaXMgZGF0YWZyYW1lIGZvciBoYWxmIGxpZmUgZXN0aW1hdGlvbgoKYGBgCgoKCmBgYHtyfQpjZWxsX2F0cmlidXRlc19maW5hbCA8LSBkZl9mb3JfTWVjaGFuaXN0aWNNb2RlbCAlPiUgCiAgZmlsdGVyKHRpbWVwb2ludCA9PSAxKSAgJT4lIAogIGxlZnRfam9pbiguLGxpdmVDZWxsc1JGUC5EQVBJLkdGUCAlPiUgc2VsZWN0KHVuaXF1ZS50cmFja0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVwb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHAuZmllbGQsZXhwZXJpbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZnAubWVhbi5iZy5zdWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmZwLm1lYW4uYmcuc3ViLnB1bmN0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXBpLm1lYW4uYmcuc3ViLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcGkubWVhbi5iZy5zdWIucHVuY3RhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJmcC5zdW0uYmcuc3ViLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJmcC5zdW0uYmcuc3ViLnB1bmN0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXBpLnN1bS5iZy5zdWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFwaS5zdW0uYmcuc3ViLnB1bmN0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVhLnB1bmN0YSksIAogICAgICAgICAgICBieSA9IGMoInVuaXF1ZS50cmFja0lEIiwgInRpbWVwb2ludCIsICJleHAuZmllbGQiLCAiZXhwZXJpbWVudCIpKSAKCmNlbGxfYXRyaWJ1dGVzX2ZpbmFsICU+JSBncm91cF9ieShleHAuZmllbGQpICU+JSB0YWxseSgpCgp3cml0ZV9jc3YoY2VsbF9hdHJpYnV0ZXNfZmluYWwsZmlsZSA9ICIvaG9tZS9EYXMvcGxvdHMvcHVwMS1yZnAtZ2ZwLWRlY2F5LzEwLTctMjItc3RhYmxlLWdmcC9kYXRhLzEwLTctMjJfc3RhYmxlX3B1cDFfYXR0cmlidXRlcy5jc3YiKQogIAoKYGBgCgojc2F2aW5nIHRoZSBkYXRhIApgYGB7cn0KZ2ZwX3N0YWJsZV9maWx0ZXJlZCA8LSBkZl9mb3JfTWVjaGFuaXN0aWNNb2RlbCAgJT4lCiAgcmVuYW1lKCJjZWxsLmlkIiA9ICJ1bmlxdWUudHJhY2tJRCIsCiAgICAgICAgICJnZnBTdW1CZ0FGc3ViIiA9ICJnZnAuc3VtLmJnLmFmLnN1YiIsCiAgICAgICAgICJnZnBNZWFuQmdBRnN1YiI9ImdmcC5tZWFuLmJnLmFmLnN1Yi5uZXciLAogICAgICAgICAibmF0LmxvZy5HZnBNZWFuIiA9ICJsbi5nZnAiICwgCiAgICAgICAgICJkZWx0YS5pbnQiID0gImxuLmdmcC5kaWYiLAogICAgICAgICAiZGVsdGEudGltZSIgPSAidGltZSIKICAgICAgICAgKSAlPiUgCiAgc2VsZWN0KCBjZWxsLmlkLAogICAgICAgICBnZnBTdW1CZ0FGc3ViLAogICAgICAgICBnZnBNZWFuQmdBRnN1YiwKICAgICAgICAgbmF0LmxvZy5HZnBNZWFuLAogICAgICAgICBkZWx0YS50aW1lLAogICAgICAgICBpbWFnZS5ubywKICAgICAgICAgZGVsdGEuaW50LCAKICAgICAgICAgZXhwLmZpZWxkCiAgICAgICAgICkKCndyaXRlX2NzdihnZnBfc3RhYmxlX2ZpbHRlcmVkICwgZmlsZSA9ICJ+L3Bsb3RzL3B1cDEtcmZwLWdmcC1kZWNheS8xMC03LTIyLXN0YWJsZS1nZnAvZGF0YS9nZnBfc3RhYmxlX3B1cDFfZmlsdGVyZWQuY3N2IikKYGBgCgojU0FWSU5HIFRIRSBEQVRBRlJBTUUgV0hJQ0ggSEFTIEFMTCBUSEUgQkFDS0dST1VORCBJTlQsIEFVVE9GTFVPUiBJTlRFTlNJVFkgKEFUIFRIRSBJTlRFUlNFQ1RJT04sIFRIRSA4MFRIIEFORCBUSEUgOTVUSCBRVUFOVElMRSBPRiBNUkcgQVVUTyBHRlAgSU5URU5TSVRZKQoKYGBge3J9CndyaXRlX2NzdihkZl9mb3JfTWVjaGFuaXN0aWNNb2RlbCAsIGZpbGUgPSAifi9wbG90cy9wdXAxLXJmcC1nZnAtZGVjYXkvMTAtNy0yMi1zdGFibGUtZ2ZwL2RhdGEvZ2ZwX3N0YWJsZV9wdXAxX3Jhd19kYXRhLmNzdiIpCmBgYAoKYGBge3J9CmdmcF9zdGFibGVfZmlsdGVyZWQgJT4lIAogIGdncGxvdCguLGFlcyhkZWx0YS50aW1lLCBnZnBNZWFuQmdBRnN1YiwgZ3JvdXAgPSBjZWxsLmlkKSkrCiAgZ2VvbV9saW5lKGFscGhhID0gMC4yKSsKICBmYWNldF93cmFwKH5leHAuZmllbGQsIHNjYWxlcyA9ICJmcmVlX3kiKQoKYGBgCgoKCg==